Используйте построитель запросов Laravel внутри WherenotIn

У меня есть следующий запрос, и я хочу знать, возможно ли это в построителе запросов laravel:

SELECT     "a".*
FROM       "area" AS "a"
INNER JOIN "transaction" AS "t" ON "t"."f_id" = "a"."f_id"
WHERE      "t"."id" = 'c5931409-37b7-4248-b958-831edaae4075'
AND        "a"."id" NOT IN (
    SELECT     "zc"."a_id"
    FROM       "transaction_detail" AS td
    INNER JOIN "zone_component" AS "zc" ON "zc"."id" = "td"."comp_id"
    WHERE      td."t_id" = 'c5931409-37b7-4248-b958-831edaae4075'
    AND        td."card_type" IN ( 'C_OVA', 'C_M21' )
);  

вы можете поместить это непосредственно в построитель запросов с помощью необработанного метода.

Sohag Hasan 21.03.2022 06:18

вы могли бы сделать что-то вроде этого DB::table('user') ->select('id','name') ->whereNotIn('id', DB::table('curses')->select('id_user')->where('id_user', '=', $id)->get()->toArray()) ->get();

Santosh Dangare 21.03.2022 13:55

@SantoshDangare Спасибо за ответ. Можете ли вы помочь мне, как использовать DISTINCT внутри этого. groupBy не работает. ->select('a.*','a.name as a_name', 'f.name as f_name', DISTINCT ON ('a.id'))

Yadhu Babu 22.03.2022 03:46

@YadhuBabu DB::table('table_name')->distinct()->get(['column_name']);

Santosh Dangare 22.03.2022 05:38

@SantoshDangare stackoverflow.com/questions/71566917/…

Yadhu Babu 22.03.2022 05:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
5
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете передать объект Closure или объект Builder в качестве второго параметра whereIn/whereNotIn

// Builder
$sub = DB::query()
    ->select('za.aid')                                         // SELECT     "zc"."a_id"
    ->from('transaction_detail', 'td')                         // FROM       "transaction_detail" AS td
    ->join('zone_component as zc', 'zc.id', 'td.comp_id')      // INNER JOIN "zone_component" AS "zc" ON "zc"."id" = "td"."comp_id"
    ->where('td.t_id', 'c5931409-37b7-4248-b958-831edaae4075') // WHERE      td."t_id" = 'c5931409-37b7-4248-b958-831edaae4075'
    ->whereIn('td.card_type', ['C_OVA', 'C_M21']);             // AND        td."card_type" IN ( 'C_OVA', 'C_M21' )
// Closure
$sub = function ($query) {
    $query->select('za.aid')                                   // SELECT     "zc"."a_id"
    ->from('transaction_detail', 'td')                         // FROM       "transaction_detail" AS td
    ->join('zone_component as zc', 'zc.id', 'td.comp_id')      // INNER JOIN "zone_component" AS "zc" ON "zc"."id" = "td"."comp_id"
    ->where('td.t_id', 'c5931409-37b7-4248-b958-831edaae4075') // WHERE      td."t_id" = 'c5931409-37b7-4248-b958-831edaae4075'
    ->whereIn('td.card_type', ['C_OVA', 'C_M21']);             // AND        td."card_type" IN ( 'C_OVA', 'C_M21' )
};
// Full Query
$results = DB::query()
    ->select('a.*')                                         // SELECT     "a".*
    ->from('area', 'a')                                     // FROM       "area" AS "a"
    ->join('transaction as t', 't.f_id', 'a.f_id')          // INNER JOIN "transaction" AS "t" ON "t"."f_id" = "a"."f_id"
    ->where('t.id', 'c5931409-37b7-4248-b958-831edaae4075') // WHERE      "t"."id" = 'c5931409-37b7-4248-b958-831edaae4075'
    ->whereNotIn('a.id', $sub)                              // AND        "a"."id" NOT IN ( ... )
    ->get();

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

whereNotIn('a.id', DB::query()->.....)
whereNotIn('a.id', function ($query) { .... })

Спасибо за ответ. Можете ли вы помочь мне, как использовать DISTINCT внутри этого. groupBy не работает. ->select('a.*','a.name as a_name', 'f.name as f_name', DISTINCT ON ('a.id'))

Yadhu Babu 22.03.2022 03:46

Используйте DB::raw для подобных выражений. select('a.*, ...., DB::raw('DISTINCT ON ("a.id")'))

IGP 22.03.2022 03:49
stackoverflow.com/questions/71566917/…
Yadhu Babu 22.03.2022 05:44

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