Eigentum Property Property [title] does not exist on this collection instance does not exist on this collection instance ist in dieser Sammlungsinstanz nicht vorhanden

Lesezeit: 3 Minuten

Eigentum Property Property title does not exist on this collection
zkanoca

Ich verfolge die Videos von Laracasts: Grundlegender Modell-/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 zur Ansicht mit dem folgenden Code in der Controller-Datei 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 bekomme eine Fehlermeldung, die besagt:

Eigentum Property Property [title] does not exist on this collection instance does not exist on this collection instance ist in dieser 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 benutze dd($about) im ersten Fall (where()->get()) werden die Daten von einem Array gekapselt. Im zweiten Fall (find(3)) zeigt es Daten wie erwartet an.

Was mache ich falsch?

Eigentum Property Property title does not exist on this collection
Alexey Mezenin

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

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

Oder Sie könnten einfach eines der Objekte anhand seines Index abrufen:

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

Oder holen Sie sich das erste Objekt aus der Sammlung:

{{ $collection->first() }}

Wenn Sie verwenden find() oder first() du bekommst ein Objektsodass Sie Eigenschaften mit einfachem abrufen können:

{{ $object->title }}

  • ja, nach dem Ausführen von Model->get() eine Liste mit einem Objekt erhalten, aus diesem Grund immer Daten anzeigen und ich kann nicht darauf zugreifen. Nach exexute first() dann Objekt abrufen

    – Rubén Ruíz

    26. Oktober 2018 um 17:42 Uhr


  • Nach 4 STUNDEN des Suchens, Lesens und Testens der Laravel-Dokumentation und des Besuchs vieler StackOverflow-Fragen/Antworten waren Sie der einzige, der erwähnte, dass get() eine Sammlung abruft. Sie waren es, die mich dazu gebracht haben, vom Stuhl aufzuspringen und zu erkennen, dass alle meine Fragen richtig waren. Das Problem lag beim “Drucken”. Von ganzem Herzen ein großes Dankeschön für diese Antwort! Ich meine es ernst!

    – Grinx.

    20. August 2020 um 18:18 Uhr

  • Beste Erklärung überhaupt

    – Quecksilber

    9. Januar um 16:49 Uhr

Eigentum Property Property title does not exist on this collection
Alex

Mit get() Methode erhalten Sie eine Sammlung (alle Daten, die der Abfrage entsprechen), versuchen Sie zu verwenden first() Stattdessen gibt es nur ein Element zurück, etwa so:

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

1646912046 110 Eigentum Property Property title does not exist on this collection
Phantih

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

anstatt get().

Bei meinem Projekt funktioniert es. Danke.

  • Während dies die Frage des Autors beantworten könnte, fehlen einige erklärende Worte und / oder Links zur Dokumentation. Raw-Code-Snippets sind ohne einige Phrasen um sie herum nicht sehr hilfreich. Es kann auch sehr hilfreich sein, wie man eine gute Antwort schreibt. Bitte bearbeiten Sie Ihre Antwort – Aus Bewertung

    – Nick

    17. Januar 2019 um 4:00 Uhr

Eine Person könnte dies beim Arbeiten mit Factory-Funktionen erhalten, daher kann ich bestätigen, dass dies eine gültige Syntax ist:

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

Möglicherweise wird der Sammlungsinstanzfehler angezeigt, wenn Sie Folgendes tun:

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

also ändere es zu:

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

Sie sollten das Sammlungsschlüsselwort im Controller verwenden. Wie hier..

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

Hier ist der Benutzer der Ressourcenname und das Profil der Modellname. Danke.

1646912046 379 Eigentum Property Property title does not exist on this collection
Onyash Ed

$about->first()->id oder
$stm->first()->title und dein Problem ist gelöst.

Als Ergebnis $about = Page::where('page', 'about-me')->get() ist eine Laravel-Sammlung, Sie können ein bestimmtes Attribut wie erhalten Titel verwenden pluck() Methode, die in beschrieben ist https://laravel.com/docs/master/collections#method-pluck.

$titles = $about->pluck( 'title' )

@foreach($titles as $title)
    {{ $title }}
@endforeach

987750cookie-checkEigentum Property Property [title] does not exist on this collection instance does not exist on this collection instance ist in dieser Sammlungsinstanz nicht vorhanden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy