Laravel 使用父列值“有”关系计数

Laravel `has` relationship count using parent column value

我想抓取关系计数小于父列值的记录。

我有一个名为 Dealer 的模型,它有一个名为 daily_assign_limit 的属性。

Dealer模型中,我有这样的关系:

public function assigns()
{
    return $this->hasMany(Assign::class);
}

public function assigns_today()
{
    return $this->assigns()->whereDate('created_at', today());
}

我试过用这个方法查询没有达到daily_assign_limit的经销商:

    return Dealer::query()
        ->has('assigns_today', '<', 'daily_assign_limit')
        ->first();

看起来 has 需要整数而不是列名。那么我如何使用父列而不是硬编码整数来完成此操作?

我想出了如何通过获取结果并循环遍历它们来做到这一点,但我仍然更喜欢通过查询构建器来完成。

这是我的解决方案:

$dealers = Dealer::query()
    ->withCount('assigns_today')
    ->get();

foreach ($dealers as $dealer) {
    if ($dealer->assigns_today_count < $dealer->daily_assign_limit) {
        return $dealer;
    }
}

return null;

如果有人能告诉我如何在没有 foreach 循环的情况下做到这一点,我将不胜感激。

我想你将不得不使用 withCount() + map() 来实现你想要的。

return Dealer::query()
    ->withCount('assigns_today')
    ->get()
    ->map(function ($q) {
        if ($q->assigns_today_count < $q->daily_assign_limit) {
            return $q;
        }
    })->filter(); // filter to remove null values