Bu koleksiyon örneğinde [title] özelliği mevcut değil


95

Laracasts'in videolarını takip ediyorum: Temel Model / Denetleyici / İş Akışını Görüntüle .

İletişim bilgilerinin bulunduğu bir masam var.

CREATE TABLE `about` (
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Denetleyici dosyasında aşağıdaki kodu kullanarak görüntülemek için verileri iletmeye çalışıyorum:

public function index()
{
    $about = Page::where('page', 'about-me')->get(); //id = 3

    return view('about', compact('about'));
}

Kodu aşağıda gösterildiği gibi göstermeye çalıştığımda,

@section('title')
    {{$about->title}}
@stop

@section('content')
    {!! $about->content !!}
@stop

Şu hata mesajı alıyorum:

Bu koleksiyon örneğinde [title] özelliği mevcut değil. (Görünüm: E: \ laragon \ www \ yeni site \ kaynaklar \ görünümler \ about.blade.php)

Ancak denetleyici dosyasında geri alma yöntemini değiştirirsem işe yarıyor.

public function index()
{
    $about = Page::find(3);

    return view('about', compact('about'));
}

Kullanmak zaman dd($about)ilk durumda ( where()->get()) veri dizisi ile kapsüllenir. İkinci durumda ( find(3)), verileri beklendiği gibi görüntüler.

Neyi yanlış yapıyorum?

Yanıtlar:


233

Kullandığınız zaman get()bir koleksiyon elde edersiniz . Bu durumda, özellikleri almak için üzerinde yinelemeniz gerekir:

@foreach ($collection as $object)
    {{ $object->title }}
@endforeach

Veya indeksine göre nesnelerden birini alabilirsiniz:

{{ $collection[0]->title }}

Veya koleksiyondaki ilk nesneyi alın:

{{ $collection->first() }}

Kullanırken find()veya first()bir nesne aldığınızda, özellikleri basit bir şekilde elde edebilirsiniz:

{{ $object->title }}

evet, Model-> get () komutunu çalıştırdıktan sonra bir nesne içeren bir liste elde edin, bu nedenle her zaman verileri gösterir ve ona erişemiyorum. Önce exexute () sonra nesneyi al
Rubén Ruíz

2
Laravel Documentation'ı 4 SAAT araştırdıktan, okuyup test ettikten ve çok sayıda StackOverflow sorusunu / cevabını ziyaret ettikten sonra, get () 'nin bir koleksiyon aldığından bahseden tek kişi sizsiniz. Beni sandalyeden atlatan ve tüm sorularımın doğru olduğunu anlamamı sağlayan sendin. Sorun "baskı" üzerindeydi. Kalbimin derinliklerinden, bu cevap için çok teşekkür ederim! Gerçekten onu kastediyorum!
Grinnex.

22

get()Yöntem ile bir koleksiyon elde edersiniz (sorguyla eşleşen tüm veriler), first()bunun yerine kullanmayı deneyin , bunun gibi yalnızca bir öğe döndürür:

 $about = Page::where('page', 'about-me')->first();

2
$about = DB::where('page', 'about-me')->first(); 

yerine get() .

Projem üzerinde çalışıyor . Teşekkürler.


3
Bu, yazarların sorusunu yanıtlasa da, bazı açıklayıcı sözcüklerden ve / veya belgelere bağlantılardan yoksundur. Ham kod parçacıkları, etraflarında bazı ifadeler olmadan pek yardımcı olmaz. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin - Yorumdan
Nick

1

Controller'da Collection anahtar sözcüğünü kullanmalısınız. Burası gibi..

public function ApiView(){
    return User::collection(Profile::all());
}

Burada Kullanıcı Kaynak Adı ve Profil Model Adıdır. Teşekkür ederim.


1

Fabrika işlevleriyle çalışırken bir kişi bunu alabilir, bu nedenle bunun geçerli sözdizimi olduğunu doğrulayabilirim:

$user = factory(User::class, 1)->create()->first();

Aşağıdakilere benzer bir şey yaparsanız koleksiyon örneği hatasını görebilirsiniz:

$user = factory(User::class, 1)->create()->id;

öyleyse şu şekilde değiştirin:

$user = factory(User::class, 1)->create()->first()->id;

0

$about->first()->idveya $stm->first()->titleve sorunun çözüldü.


Kod önerim tamir için işe yarıyor ama proje üzerinde değil.
Onyash Ed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.