Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть две таблицы:
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 который я передаю.
Не в сети
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.
Не в сети