Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.03.2022 16:54:12

Как вытащить с таблицы данные, которых нет в другой таблице?

Есть две таблицы:

table_1
id    name
1    name_1
2    name_2
table_2
id    another_id    name
1    1    name_1
2    2    name_3
3    1    name_2
4    3    name_4
Нужно вытащить name из таблицы table_1, которых нет в table_2 и чтобы не совпадало c полем another_id.

return DB::table('table_1')
    ->leftJoin('table_2', 'table_1.name' , '=' , 'table_2.name')
    ->where('table_2.name', null) ->where('table_2. another_id' ,'!= ', $id)
    ->select('table_1.name' )
    ->get();
Сделал так. Если убрать условие where('table_2.another_id' ,'!= ', $id), то срабатывает, но мне нужно чтобы ещё сравнивалось с полем another_id с $id который я передаю.

Не в сети

#2 02.03.2022 14:01:28

Re: Как вытащить с таблицы данные, которых нет в другой таблице?

where('table_2.name', null) означает что запись из table_2 отсутствует (я бы таки указал здесь id а не name)
ну нету записи, с чем ты собираешся сравнивать $id в следующем условии where('table_2. another_id' ,'!= ', $id)?

я не знаю изначальной задачи, но предположу что второе условие надо изменить на

->where(function($query) {
  $query->where('table_2. another_id' ,'!= ', $id)
    ->orWhereNull('table_2. another_id');
})

P.S. лишние пробелы тут твои, я только скопировал )))

Изменено artoodetoo (02.03.2022 14:02:11)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела