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?
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 }}
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();
$about = DB::where('page', 'about-me')->first();
anstelle vonget()
.
Es funktioniert in meinem Projekt. Vielen Dank.
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.