2016-07-11 14 views
0

Ich habe die aktuelle Beziehung zwischen einem Client und seinen ProjektenLaravel Gehört Relation Existance

Projektmodell

public function client() 
{ 
    return $this->belongsTo('Client', 'cid'); 
} 

Project Controller

public function index() { 
    $projects = Project::with('client')->orderBy('pid', 'desc')->get(); 
    $this->layout->content = View::make('projects.index')->with('projects', $projects); 
} 

Jetzt ist es alles funktioniert gut, und ich bin in der Lage um alle Informationen über den Client aus der Projektansicht zu erhalten. Wenn die Client-ID jedoch nicht in der Datenbank vorhanden ist (in der Client-Tabelle), erhalte ich den Fehler "Ich versuche, die Eigenschaft eines Nicht-Objekts zu erhalten." Anstatt diesen Fehler zu bekommen, möchte ich ein leeres Objekt senden können. Nicht wirklich sicher, wo ich anfangen soll, überprüfe ich vom Model selbst oder vom Controller oder füge ich einen Check in die Ansicht ein?

+0

Wenn ich :: has anstelle von :: mit für den Client verwende, wird nur die gesamte Projektreihe weggelassen (ich zeige Projekte in einer Tabelle an). Ich möchte, dass das Projekt nur mit einem leeren Kontakt oder einem "Unbekannt" angezeigt wird, wenn es nicht gefunden wird. – NyseX

Antwort

0

Sie können apply constraint to eager loading. Für einen Proof of Concept,

$users = Project::with(array('client' => function($query) 
{ 
    $query->raw(
    /*Add your constraint here to coalesce a default for cid or clients. 
    You may set a default null record in the client table for this case.*/ 
); 

}))->get(); 
0

Ich wette, wenn Sie eine Tabelle machen verwenden Sie some wie:

project.client.name 

In diesem Fall sollte es eine Ausnahme, weil Client existiert nicht, aber sie versuchen, Name Eigenschaft zuzugreifen. Sie sollten prüfen, ob der Client beim Rendern dieser Tabelle existiert.

+0

Ja, das tue ich, und genau das möchte ich fragen, wie genau überprüfe ich, ob dieser Client existiert oder nicht? Es gibt viele Projekte, die geladen werden, aber wenn der Client nicht in der Client-Tabelle existiert, möchte ich, dass er ein leeres Objekt sendet. Wenn ich versuche, $ projects-> client-> name zu nehmen, gibt es einen Null-Wert zurück ein leeres Objekt kein Fehler, da kein Objekt gefunden wird. – NyseX

+0

Versuchen Sie dies in Ihrem Code {{isset ($ project.client)? $ project.client: 'Standard'}} –

Verwandte Themen