Properti [judul] tidak ada pada contoh koleksi ini

95

Saya mengikuti video Laracasts: Basic Model / Controller / View Workflow .

Saya memiliki tabel berisi informasi kontak.

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

Saya mencoba mengirimkan data untuk dilihat menggunakan kode berikut di file pengontrol:

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

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

Ketika saya mencoba menampilkan kode seperti yang ditunjukkan di bawah ini,

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

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

Saya mendapatkan kesalahan yang mengatakan:

Properti [judul] tidak ada pada contoh koleksi ini. (Tampilan: E: \ laragon \ www \ newsite \ resources \ views \ about.blade.php)

Tetapi jika saya mengubah metode pengambilan di file pengontrol, itu berhasil.

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

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

Ketika saya menggunakan dd($about)dalam case pertama ( where()->get()) data dienkapsulasi oleh array. Dalam case kedua ( find(3)) ini menampilkan data seperti yang diharapkan.

Apa yang saya lakukan salah?

zkanoca
sumber

Jawaban:

233

Saat Anda menggunakan get()Anda mendapatkan koleksi . Dalam hal ini Anda perlu mengulanginya untuk mendapatkan properti:

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

Atau Anda bisa mendapatkan salah satu objek dengan indeksnya:

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

Atau dapatkan objek pertama dari koleksi:

{{ $collection->first() }}

Saat Anda menggunakan find()atau first()Anda mendapatkan sebuah objek , maka Anda bisa mendapatkan properti dengan sederhana:

{{ $object->title }}
Alexey Mezenin
sumber
ya, setelah mengeksekusi Model-> get () dapatkan daftar dengan satu objek, oleh karena itu selalu tampilkan data dan saya tidak dapat mengaksesnya. Setelah exexute first () lalu dapatkan objek
Rubén Ruíz
2
Setelah 4 JAM mencari, membaca dan menguji Dokumentasi Laravel dan mengunjungi BANYAK pertanyaan / jawaban StackOverflow, Anda adalah satu-satunya yang menyebutkan bahwa get () mengambil sebuah koleksi. Andalah yang membuat saya melompat dari kursi dan menyadari bahwa semua pertanyaan saya benar. Masalahnya ada di "cetakan". Dari lubuk hati saya, terima kasih banyak atas jawaban ini! Saya benar-benar serius!
Grinnex.
22

Dengan get()metode Anda mendapatkan kumpulan (semua data yang cocok dengan kueri), coba gunakan first()sebagai gantinya, itu hanya mengembalikan satu elemen, seperti ini:

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

sebagai ganti get() .

Ini bekerja pada proyek saya . Terima kasih.

Phantih
sumber
3
Meskipun ini mungkin menjawab pertanyaan penulis, ini kekurangan beberapa kata yang menjelaskan dan / atau tautan ke dokumentasi. Potongan kode mentah tidak terlalu membantu tanpa beberapa frase di sekitarnya. Anda juga mungkin menemukan cara menulis jawaban yang bagus sangat membantu. Harap edit jawaban Anda - Dari Ulasan
Nick
1

Anda Harus Menggunakan kata kunci Collection di Controller. Seperti di sini..

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

Di sini, Pengguna adalah Nama Sumber Daya dan Profil adalah Nama Model. Terima kasih.

Pnj Patel
sumber
1

Seseorang mungkin mendapatkan ini saat bekerja dengan fungsi pabrik, jadi saya dapat mengonfirmasi bahwa ini adalah sintaks yang valid:

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

Anda mungkin melihat kesalahan contoh koleksi jika Anda melakukan sesuatu seperti:

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

jadi ubahlah menjadi:

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

$about->first()->idatau $stm->first()->titledan masalah Anda terselesaikan.

Onyash Ed
sumber
Saran kode saya berfungsi pada tinker tetapi tidak pada proyek.
Onyash Ed