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
我想抓取关系计数小于父列值的记录。
我有一个名为 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