Laravel 5.4 Eloquent 从 collection 中获取 x 个随机记录,其中 属性 为空

Laravel 5.4 Eloquent get x random records from collection where property is null

学习eloquent/laravel。我有一个 collection:

$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-query:

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

如果你已经有 collection 那么你可以这样做:

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