2016-03-23 9 views
1

Ich versuche, Daten aus einer Eloquent Abfrage wie folgt zu erhalten:Anzeige

$submission->find($id)->first()->with('user', 'clientform')->get();

ich die Vorlage zu der Ansicht zu senden und zu versuchen, von den Eigenschaften zuzugreifen user Modell wie folgt:

{{ $submission->clientform->name }} 

jedoch Laravel wirft den folgenden Fehler:

Undefined property: Illuminate\Database\Eloquent\Collection::$clientform 

Was mache ich falsch mit der Art, wie meine Abfrage formatiert ist?

Antwort

2

Sie übertreiben es!

Lassen Sie uns es brechen:

$submission->find($id); 

Wird eine Instanz des Modells zurück, die mit dem Eintrag entspricht den Primärschlüssel $id haben.

$submission->find($id)->first(); 

Dies ist eine unnötige Wiederholung; Die find Methode gibt Ihnen bereits einen einzigen Eintrag, keine Notwendigkeit, first darauf anzurufen.

$submission->find($id)->first()->with('user', 'clientform'); 

Hier beginnen Sie den falschen Weg; Beim Aufruf mit einem Modell transformiert Laravel dieses Modell erneut in einen Abfragegenerator, obwohl es bereits durch Aufruf von find aufgelöst wurde.

$submission->find($id)->first()->with('user', 'clientform')->get(); 

Schließlich ist die get Methode löst den Builder in eine Illuminate\Support\Collection, unabhängig von der Anzahl der gefundenen Einträgen (d.h. es könnte ein Collection von nur ein Element sein). Es ist jedoch erwähnenswert, dass Ihre Anfrage höchstwahrscheinlich vollständig durch einen Anruf zurückgesetzt wurde. Es wäre das gleiche wie ein neues Submission Modell instanziieren und Ihre Abfrage damit aufbauen. Das bedeutet, dass Sie wahrscheinlich eine Sammlung von Ihre Einreichung Einträge verwenden, nicht nur die mit $id.

Lange Rede kurzer Sinn, das ist, was Sie wollen:

$submission->with('user', 'clientform')->find($id); 

Es wird die passenden $id, mit den user und clientform Beziehungen eifrig belasteten holen.

+0

Vielen Dank für die kurze Erklärung! Das hat alle meine Probleme gelöst. – AJStacy