Śledzę filmy Laracasts: Basic Model / Controller / View Workflow .
Mam tabelę z danymi kontaktowymi.
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
Próbuję przekazać dane do wyświetlenia przy użyciu następującego kodu w pliku kontrolera:
public function index()
{
$about = Page::where('page', 'about-me')->get(); //id = 3
return view('about', compact('about'));
}
Kiedy próbuję wyświetlić kod, jak pokazano poniżej,
@section('title')
{{$about->title}}
@stop
@section('content')
{!! $about->content !!}
@stop
Otrzymuję błąd, który mówi:
Właściwość [tytuł] nie istnieje w tej instancji kolekcji. (Widok: E: \ laragon \ www \ newsite \ resources \ views \ about.blade.php)
Ale jeśli zmienię metodę pobierania w pliku kontrolera, to działa.
public function index()
{
$about = Page::find(3);
return view('about', compact('about'));
}
Kiedy używam dd($about)
w pierwszym przypadku ( where()->get()
), dane są hermetyzowane przez tablicę. W drugim przypadku ( find(3)
) wyświetla dane zgodnie z oczekiwaniami.
Co ja robię źle?
źródło
Dzięki
get()
metodzie otrzymujesz kolekcję (wszystkie dane pasujące do zapytania), spróbuj użyćfirst()
zamiast tego, zwraca tylko jeden element, na przykład:$about = Page::where('page', 'about-me')->first();
źródło
$about = DB::where('page', 'about-me')->first();
zamiast
get()
.Działa na moim projekcie . Dzięki.
źródło
Należy użyć słowa kluczowego kolekcji w kontrolerze. Jak tutaj..
public function ApiView(){ return User::collection(Profile::all()); }
Tutaj użytkownik to nazwa zasobu, a profil to nazwa modelu. Dziękuję Ci.
źródło
Osoba może otrzymać to podczas pracy z funkcjami fabrycznymi, więc mogę potwierdzić, że jest to prawidłowa składnia:
$user = factory(User::class, 1)->create()->first();
Możesz zobaczyć błąd instancji kolekcji, jeśli zrobisz coś takiego:
$user = factory(User::class, 1)->create()->id;
więc zmień to na:
$user = factory(User::class, 1)->create()->first()->id;
źródło
$about->first()->id
lub$stm->first()->title
problem zostanie rozwiązany.źródło