yii2 запрос INNER JOIN c массивом значений

206
22 июля 2021, 10:20

Есть таблица с квартирами и у каждой квартиры есть удобства. Удобства разные и разное количество их. Мне надо выбрать только те квартиры в которых есть определенный список удобств. Т.е. мне нужно чтобы показались квартиры у которых есть и утюг и стиралка.

 $query->innerJoinWith(['equipmentsToApartments' => function ($q) {
        $q->andWhere(['IN',  'equipment_id' ,[2, 10]]);
        return $q;
    }]);

такой код работает. Но получается, выбираются квартиры у которых есть или 2, или 10, или 2,10. А мне надо чтобы только 2,10. 'IN' тут получается как OR, а надо AND.

Answer 1

Возможные подходы на "чистом" SQL:

  • при строго 2 параметрах

    SELECT [DISTINCT] t1.id
    FROM sourcetable t1
    JOIN sourcetable t2
      ON t1.id = t2.id
    WHERE t1.field = @value1
      AND t2.field = @value2
    
  • при неопределённом количестве параметров

    SELECT id
    FROM sourcetable
    WHERE field IN (@value1, @value2, ...)
    GROUP BY id
    HAVING COUNT([DISTINCT] @value) = @count_of_values
    
READ ALSO
Отследить все запросы к базе MySQL

Отследить все запросы к базе MySQL

Суть проблемы: есть скрипт огромный, написанный мною, но использующий множество функционала из фремворка CMS(prestashop)Сам по себе процесс работы...

411
Как подключиться к сети TOR без прокси?

Как подключиться к сети TOR без прокси?

Надо спарситьonion сайт, но используя curl и другие похожие посты ничего не выходит

212
Одинарная кавычка в текстовом поле php

Одинарная кавычка в текстовом поле php

Есть текстовое поле с именем nicknameИз него значение передается в базу данных

252
Разделить объект на столбики

Разделить объект на столбики

Я хочу разделить данные на 2 столбика в цикле foreachВот моё представление

285