web-dev-qa-db-de.com

Die Eigenschaft [title] ist in dieser Auflistungsinstanz nicht vorhanden

Ich verfolge die Videos von Laracasts: Basismodell/Controller/View Workflow .

Ich habe eine Tabelle mit Kontaktinformationen.

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

Ich versuche, Daten mit dem folgenden Code in der Controller-Datei an die Anzeige zu übergeben:

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

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

Wenn ich versuche, den Code wie unten gezeigt anzuzeigen,

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

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

Ich erhalte die Fehlermeldung:

Die Eigenschaft [title] ist in dieser Auflistungsinstanz nicht vorhanden. (Ansicht: E:\laragon\www\newsite\resources\views\about.blade.php)

Aber wenn ich die Abrufmethode in der Controller-Datei ändere, funktioniert es.

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

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

Wenn ich dd($about) im ersten Fall verwende (where()->get()), werden die Daten von einem Array eingekapselt. Im zweiten Fall (find(3)) werden die Daten wie erwartet angezeigt.

Was mache ich falsch?

61
zkanoca

Wenn Sie get() verwenden, erhalten Sie collection. In diesem Fall müssen Sie darüber iterieren, um Eigenschaften zu erhalten:

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

Oder Sie können eines der Objekte einfach über den Index abrufen:

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

Oder erstes Objekt aus der Sammlung holen:

{{ $collection->first() }}

Wenn Sie find() oder first() verwenden, erhalten Sie ein Objekt, sodass Sie Eigenschaften mit simple erhalten können:

{{ $object->title }}
157
Alexey Mezenin

Mit der get() -Methode erhalten Sie eine Sammlung (alle Daten, die mit der Abfrage übereinstimmen). Versuchen Sie stattdessen, first() zu verwenden, und geben Sie nur ein Element wie das folgende zurück:

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

anstelle vonget().

Es funktioniert in meinem Projekt. Vielen Dank.

1
Phantih

Das Schlüsselwort "Auflistung" sollte in Controller verwendet werden. Wie hier..

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

Hier ist Benutzer der Ressourcenname und Profil der Modellname. Dankeschön.

1
Pnj Patel