@oleg_kry

Как выполнить запрос объединив две таблицы в Laravel 9?

Вот моя реализация, но я применяю два запроса:
$fleets1 = DB::table('fleet_users') // таблица только допуски на самолеты по fleet_id
            ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleet_users.fleet_id')
            ->select('fleet_users.fleet_id','fleet_users.state','fleet_dictionaries.manufacture','fleet_dictionaries.description')
            ->where('fleet_users.user_id', $id)
            ->get();


foreach ($fleets1 as $fl)
        {
            $arr[] = $fl->fleet_id; 
        }

        $fleets = DB::table('fleets') // записи кроме  $arr
        ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleets.fleet_id')
            ->select('fleets.fleet_id','fleet_dictionaries.manufacture','fleet_dictionaries.description')
            ->whereNotIn('fleets.fleet_id', $arr) 
            ->where('fleets.airline_id', $idport)
            ->distinct('fleets.fleet_id')
            ->get(); // записи кроме $arr (записи для которых нет допусков)

В итоге во View вывожу список самолетов в два цикла: 1- у которых есть допуски и 2 - какие остались от всего списка самолетов. Возможно ли одним запросом вывести весь список самолетов и уже помеченные какие имеют допуски.
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
Как то так. Но честно говоря мне писать такие запросы без IDE это тоскливо - мог накосячить
$fleets = DB::table('fleets') // записи кроме  $arr
        ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleets.fleet_id')
            ->select('fleets.fleet_id','fleet_dictionaries.manufacture','fleet_dictionaries.description', DB::RAW('IF(ISNULL(fleets_with_dopusk.fleet_id), "есть допуск", "нет допуска")'))
            ->leftJoinSub(function($query) use($id){
                  return $query->from('fleet_users') 
                     ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleet_users.fleet_id')
                     ->select('fleet_users.fleet_id')
                     ->where('fleet_users.user_id', $id);
            }, 'fleets_with_dopusk', 'fleets_with_dopusk.fleet_id', '=', 'fleet_users.fleet_id') 
            ->where('fleets.airline_id', $idport)
            ->distinct('fleets.fleet_id')
            ->get();


$fleets = DB::table('fleets') // записи кроме  $arr
        ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleets.fleet_id')
            ->select('fleets.fleet_id','fleet_dictionaries.manufacture','fleet_dictionaries.description')
            ->whereNotIn('fleets.fleet_id', function($query) use($id){
                  return $query->from('fleet_users') 
                     ->join('fleet_dictionaries', 'fleet_dictionaries.id', '=', 'fleet_users.fleet_id')
                     ->select('fleet_users.fleet_id')
                     ->where('fleet_users.user_id', $id);
            }) 
            ->where('fleets.airline_id', $idport)
            ->distinct('fleets.fleet_id')
            ->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы