2016-05-14 17 views
2

なぜこれについて複数の結果が得られますか?私はちょうど与えられたクライアントIDの "連絡先"がほしいです。すべてのクライアントではありません。findOrFail()でLaravel eager loading issue

public function edit($id) 
{ 
    $client = Client::findOrFail($id)->with('contacts')->get(); 
} 

おかげで、

答えて

2

は基本的には、findOrFail()は、コレクションを返すのではなく、あなたのための単一の結果を検索します。つまり、すでにget()が呼び出されているということです。だから、後にget()を追加することはできません。もしあなたがそうしたならば、あなたは本質的に新しいクエリを作成しているので気づいたように奇妙な結果を得るでしょう。

これは、何かを熱心に読み込む必要はないということも意味します。 eager loadingが良い理由は、単一の問合せで複数のオブジェクトのデータをフェッチできるためです。しかし、あなたはここに一つのオブジェクトしか持っていません - それは本当に重要ではありません。

連絡先が必要な場合は、$client = Client::findOrFail($id);、その後$client->contactsとすると簡単にできます。あなたのパフォーマンスを悪化させません。

そして、あなたが連絡先だけではなく、クライアントをしたい場合、あなたは簡単にこれを行うことができます:$client = Client::findOrFail($id)->contacts;

+0

非常に本当の私はbasclyしばらく前に同じ質問をし、findorfailは使用せずにeagerloadます - >(少なくとも付き私の場合は)とにかく私はそれもこのように動作することができますことをクライアント::と( '連絡先') - > findOrFail($ id); –

+0

ありがとうございました。また、blade.view内の「連絡先」にアクセスするにはどうすればよいですか? '{{Form :: text {'contact-> name'、null、array( 'class' => 'フォームコントロール'))}} ' – fabian

+0

If –

関連する問題