2016-07-11 11 views
0

私は、クライアントと彼のプロジェクト間の現在の関係Laravel belongsToの関係Existance

プロジェクトモデルを持っている

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

プロジェクトコントローラ今ではすべて正常に動作し、私はできる午前

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

プロジェクトビューからクライアントに関するすべての情報を取得します。しかし、クライアントIDがデータベース(クライアントテーブル内)に存在しない場合、「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されます。このエラーを取得する代わりに、空のオブジェクトを送信できるようにしたいと考えています。しかし、どこから始めるべきかわからないのですが、モデル自体かコントローラーかをチェックするか、ビューにチェックを入れますか?

+0

私は:: forの代わりに:: forをクライアントに使用すると、プロジェクトの行全体が省略されます(私はプロジェクトをテーブルに表示しています)。私は空の連絡先だけでプロジェクトを表示したい、見つからなければ "不明"を表示したい。 – NyseX

答えて

0

apply constraint to eager loadingです。概念の証明のために、

$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

あなたがsomethinkなどを使用して、テーブルのレンダリング時に私は、賭け:この場合、

project.client.name 

をクライアントが存在しないので、それが例外をスローする必要がありますがnameプロパティにアクセスしようとしています。このテーブルをレンダリングするときにクライアントが存在するかどうかを確認する必要があります。

+0

はい、私はそうしています。それはまさに私が尋ねようとしていることです。クライアントが存在するかどうかを正確に確認するにはどうすればいいですか?多くのプロジェクトがロードされていますが、クライアントがクライアントテーブルに存在しない場合は、空のオブジェクトを送信して$ projects-> client-> nameを取得しようとするとヌル値を返しますオブジェクトがないためエラーではない空のオブジェクト。 – NyseX

+0

コード内で試してください {{isset($ project.client)? $ project.client: 'デフォルト'}} –