Laravel красноречивый вложенный ребенок с фильтром - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть эти отношения:

  • Комбинация продуктов - Продукт (BelongsToMany)

  • Продукт - Инвентаризация (BelongsToMany)

У меня есть поле количества в сводной таблице между Продуктом и Инвентаризацией для хранения количества продукта.

Я хочу получить все комбинации продуктов , которые включают продукты и эти продукты должны быть в наличии (количество> 0).

Вот мой код:

/**
 * Get available combos.
 *
 * @param $query
 * @return mixed
 */
public function scopeAvailable($query)
{
    return $query->where('status', 1)
        ->whereHas('products.inventories', function ($query) {
            $query->where('quantity', '>', 0);
        });
}

Этот код будет работать, если все продукты отсутствуют на складе (количество = 0) , Если один из продуктов в комбо имеет количество> 0, он больше не будет работать.

Спасибо!

1 Ответ

1 голос
/ 11 февраля 2020

Вы можете отменить логику c из запроса. Вместо того, чтобы извлекать товары, у которых количество больше нуля, вы можете извлечь товары, у которых количество не равно нулю.

return $query->where('status', 1)
    ->whereDoesntHave('products.inventories', function ($query) {
        $query->where('quantity', 0);
    });

Более подробная информация здесь: https://laravel.com/docs/6.x/eloquent-relationships#querying -отношения -отсутствие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...