Laravel Eloquent-最受欢迎的查询

时间:2019-04-12 09:47:28

标签: php laravel laravel-5 eloquent

我有两个表,产品和交易。一个产品可以有很多交易。

即使一个产品有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');
}

上述代码的问题在于,并非所有产品都将退回,只有有交易的产品才会退回。

如何在给定日期期限内退回所有按交易数量订购的产品?

1 个答案:

答案 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');
}