Laravel 5.4 Eloquent从属性为null的集合中获取x个随机记录

时间:2017-08-25 05:45:39

标签: php laravel-5.4 laravel-eloquent

学习eloquent/laravel。我有一个集合:

$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);

我想知道是否有办法在一个链式声明中巧妙地做到这一点,而不是走向过滤器/地图的路径。

1 个答案:

答案 0 :(得分:2)

为什么不将条件添加到sql-query:

$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);