У меня есть две таблицы:
TABLE_A имеет следующие столбцы:
id - rule_id - car_id
100 - 3 - 5
101 - 4 - 5
102 - 2 - 6
103 - 3 - 6
и TABLE_B имеет больше столбцов, но те, которые необходимы здесь:
id - car_id
70 - 5
71 - 6
Я хочу объединить эти две таблицы.Мой код ниже:
$ruleIds = [1,2,3]; // Got from user: User wants to see cars that are not included in those(1,2,3) rules.
$cars = Car::where('type', $type);
$result = $cars->join('rule', 'rule.car_id', 'car.car_id')
->whereNotIn('rule.rule_id', $ruleIds);
, но MySQL делает следующее:
Объединяет две таблицы на rule.car_id
и car.car_id
Проверки, где rule.rule_id != 1
, rule.rule_id != 2
, rule.rule_id != 3
.
Однако для car_id из 6 он возвращает запись, в то время как я объявил whereNotIn('rule.rule_id', [1,2,3])
.Он говорит себе, что car_id из 6 не имеет rule_id из 2, но второй с rule_id из 3 не равен 2, поэтому он снова возвращает запись.
Как я могу предотвратить возврат записей для каждого условия вчтобы не возвращать значение, если одно из whereNotIn
условий не обязательно соответствует всем им?
, например: если я (как пользователь) установил 1,2 для правил, он не должен возвращать автомобиль сcar_id = 6 из таблицы cars, потому что в таблице правил у нас есть правило, что его rule_id равен 2 (одно из правил, которое я (пользователь) установил).
Так что, если 1..Возвратить все, если 2..Вернутьcar_id из 5, если 3.. Чтобы вернуть нет, если 1,2,3,4 .. Чтобы вернуть нет
Относительно "Отредактируйте свой вопрос и покажите пример вывода на основе rules_id = (1, 2). Показатьэто как таблица, а не как неразборчивый текст ".Я хочу, чтобы возвращаемое значение было:
Array ()