Удаление записей в Yii2 при помощи метода deleteAll и условии not in выглядит не очень очевидным и столкнувшись с этой задачей, решил написать короткую заметку с примером реализации.
Секрет в том, что условие надо задавать в виде массива. Приведу пример:
SomeModel::deleteAll([
'AND',
'post_id' => $id,
['not in', 'id', $arrayOfIds],
]);
Этот пример сгенерирует следующий запрос (при входящих данных, например $id = 1, $arrayOfIds = [1, 2, 3, 4]):
DELETE FROM `some_table` WHERE post_id = 1 AND NOT id IN ( 1, 2, 3, 4 )
Надеюсь статья была Вам полезной.
Удачи!