2017-08-25 9 views
1

学習eloquent/laravelLaravel 5.4属性がヌルであるコレクションからのEloquent xランダムレコード

$regions = Region::with('neighbors') 
    ->join('cards', 'cards.id', '=', 'regions.risk_card_id') 
    ->get(); 

私は値または行を持っている:

$regionsPerUser = 8; 

私はランダムなレコードを引くためにこれをやっている:私は、コレクションしてい

$regions = $regions->random($regionsPerUser); 

をしかし、私はどここの選択をフィルタリングする必要があります$regions->user_idはnullではありません。

ランダム呼び出しを連鎖の一部としてフィルタリングする方法はありますか?

私は動作しません。それはこの試みた:

$regions = $regions->whereNotNull('user_id')->random($regionsPerUser); 

をし、フィルタ/マップの道を行くのとは対照的に、きちんと1つのチェーン文でこれを行う方法がある場合、私は疑問に思って。

答えて

2

理由だけではなく、SQLクエリにあなたの条件を追加していない:

$regions = Region::with('neighbors') 
    ->join('cards', 'cards.id', '=', 'regions.risk_card_id') 
    ->whereNotNull('user_id') 
    ->inRandomOrder() 
    ->limit($regionsPerUser) 
    ->get(); 

すでにコレクションを持っているなら、あなたのようなものを行うことができます。このコレクションがされているので、無ああ

$regions = $regions 
    ->filter(function ($value) { 
     return !is_null($value['user_id']); 
    }) 
    ->random($regionsPerUser); 
+0

を操作された投稿はDBから取得します。私はメモリ内のコレクションにアクセスしようとしています。 – TheRealPapa

+0

アップデートを追加しました。 –