Ich verfolge die Videos von Laracasts: Basic Model / 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 eine Fehlermeldung, die besagt:
Die Eigenschaft [title] ist für diese Sammlungsinstanz 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 ( where()->get()
) verwende, werden die Daten von einem Array gekapselt. Im zweiten Fall ( find(3)
) werden die Daten wie erwartet angezeigt.
Was mache ich falsch?
quelle
Mit der
get()
Methode erhalten Sie eine Sammlung (alle Daten, die mit der Abfrage übereinstimmen). Versuchen Siefirst()
stattdessen, sie zu verwenden . Sie gibt nur ein Element zurück, wie folgt:$about = Page::where('page', 'about-me')->first();
quelle
$about = DB::where('page', 'about-me')->first();
anstelle von
get()
.Es funktioniert bei meinem Projekt . Vielen Dank.
quelle
Sie sollten das Schlüsselwort Collection in Controller verwenden. Wie hier..
public function ApiView(){ return User::collection(Profile::all()); }
Hier ist Benutzer Ressourcenname und Profil Modellname. Vielen Dank.
quelle
Eine Person kann dies während der Arbeit mit Factory-Funktionen erhalten, sodass ich bestätigen kann, dass dies eine gültige Syntax ist:
$user = factory(User::class, 1)->create()->first();
Möglicherweise wird der Fehler der Sammlungsinstanz angezeigt, wenn Sie Folgendes tun:
$user = factory(User::class, 1)->create()->id;
Ändern Sie es also in:
$user = factory(User::class, 1)->create()->first()->id;
quelle
$about->first()->id
oder$stm->first()->title
und Ihr Problem ist gelöst.quelle