我有两个表,产品和交易。一个产品可以有很多交易。
即使一个产品有0个交易,我仍要按照给定时间内的交易次数来订购所有产品。
Products.php(模型)
public function scopePopular($builder, $from, $to)
{
return $builder
->withCount('transactions')
->whereHas('transactions', function ($transaction) use ($from, $to) {
$transaction
->whereDate('created_at', '>', $from)
->whereDate('created_at', '<', $to);
})
->orderBy('transactions_count', 'desc');
}
上述代码的问题在于,并非所有产品都将退回,只有有交易的产品才会退回。
如何在给定日期期限内退回所有按交易数量订购的产品?
答案 0 :(得分:2)
问题是您要搜索在两个日期之间使用whereHas
进行交易的产品
因此,您可以为withCount
语句定义查询:
public function scopePopular($builder, $from, $to)
{
return $builder
->withCount(['transactions' => function ($transaction) use ($from, $to) {
$transaction
->whereDate('created_at', '>', $from)
->whereDate('created_at', '<', $to);
}])
->orderBy('transactions_count', 'desc');
}