2016-11-04 4 views
1

私は2つのテーブルの間に多対1の関係を持っていますが、 'with()'メソッドを使用して、それらのすべてではなく関連するレコードを1つだけ持ち込む方法はありますか? (たとえば、日付が現在の日付に最も近い日付)Eloquent 'with()'は1レコードですか?

答えて

2

あなたが関係を照会するwith()方法でクロージャを使用することができます。

$users->with(['address' => function($q) use ($someVariable) { 
    $q->where('zip', '=', $someVariable); 
}); 
+0

グレート - そのサブクエリを1つの結果に限定できますか? – daninthemix

+0

正直なところ、私は試みたことがありませんでしたが、クロージャのクエリにすべての通常のメソッドを連鎖させることができると思います。クエリで結果を制限できない場合は、それらを注文して、返されたコレクションから最初のものを選択することができます。 – Jeemusu

+0

ちょうどそれをテストし、最初の()サブクエリで動作します:)ありがとう – daninthemix

0

->first()メソッドがあります。あなたに最初の結果しか与えないでしょう。これにより、->get()が置き換えられます。

https://laravel.com/docs/5.3/eloquent#retrieving-single-models

+0

メインクエリのget()が必要ですが、with()は1つだけを返すようにします。 – daninthemix

+0

OK、それはあなたの質問ではっきりしていません。 @Jeemusoが説明するように、クロージャーが行く方法でしょう。 – Christophvh

0

以下の方法でwith()メソッドを使用できます。

$user->with(['address'])->findWhere(['zip'=>$someVariable]); 
関連する問題