Laravel 5.4雄辩地从属性为空的集合中获得x个随机记录

问题描述:

学习eloquent/laravel。我有一个集合:Laravel 5.4雄辩地从属性为空的集合中获得x个随机记录

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

我有一个值或行:

$regionsPerUser = 8; 

我这样做是为了拉随机记录:

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

但我需要过滤该选择哪里$regions->user_id不为空。

有没有办法将随机呼叫过滤为链接的一部分?

我想这不工作:

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

而且我想知道如果有一种方法可以巧妙地做到这一点的一个链接声明,而不是下降的过滤器/地图的路径。

为什么不只是增加你的条件,以一个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

添加了更新,检查。 –