Laravel Eloquent - самый популярный запрос - PullRequest
1 голос
/ 12 апреля 2019

У меня есть две таблицы, Продукты и Транзакции.У продукта может быть много транзакций.

Я пытаюсь упорядочить все продукты по количеству транзакций за определенный период времени, даже если продукт имеет 0 транзакций.

Продукты.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 Ответ

2 голосов
/ 12 апреля 2019

Проблема в том, что вы ищете товары, в которых транзакции между двумя датами указаны с помощью 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...