Красноречивые отношения, если они не в подзапросе

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

/** @var \Illuminate\Database\Query\Builder $images */
$images = $vehicle->images()
    ->whereIn('image_category', $website->image_categories)
    ->orderBy('seq', 'ASC');

$images->whereNotIn('id', static function ($q) {
    return $q->select('id')
        ->whereIn('image_category', [0, 99])
        ->groupBy('seq')
        ->having(DB::raw('count(`seq`)'), '>', 1);
});

dd($images->toSql(), $images->getBindings());

Итак, выше мой код, почти работает так, как я хочу, однако кажется, что переменная $q не имеет имени таблицы в запросе, ниже выводится запрос:

select
    *
from
    `vehicle_images`
where
    `vehicle_images`.`vehicle_id` = ?
    and `vehicle_images`.`vehicle_id` is not null
    and `image_category` in (?, ?)
    and `id` not in (
        select
            `id`
        where
            `image_category` in (?, ?)
        group by
            `seq`
        having
            count(`seq`) > ?
    )
order by
    `seq` asc

Это отношение:

public function images()
{
    return $this->hasMany(VehicleImage::class);
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете указать, какую таблицу вы хотите использовать.

$images->whereNotIn('id', static function ($q) {
    return $q->select('id')->from('{CORRECT_TABLE_NAME_HERE}')
        ->whereIn('image_category', [0, 99])
        ->groupBy('seq')
        ->having(DB::raw('count(`seq`)'), '>', 1);
});

Я не знаю, каким именно должно быть имя таблицы, отсюда и заполнитель.

Я закончил тем, что сделал это, надеялся, что он просто примет его из переданной в ссылке QueryBuilder.

Martyn Ball 16.03.2022 16:44

Другие вопросы по теме