Yii2基于等于条件和非条件删除所有行

时间:2016-07-01 10:34:14

标签: yii2

这里我使用Yii2来开发应用程序。它与Yii1略有不同。在开发过程中,我只是坚持我需要一个区域的删除功能。 要删除DB中的某些行,我使用deleteAll()方法,如下所示:

Model::deleteAll(['not in', '<attribute_1>', $attribute_1_values_array]);

这对我来说很好。但是现在我想在这个删除函数中添加另一个条件,如:

<attribute_2>=<attribute_2_value>

我知道我们可以使用where()添加条件delete(),然后我尝试使用此deleteAll()方法。但它不支持。

在这里,我需要在同一查询中结合not in条件和equal to条件。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

这是我通常如何做到这一点:

\common\models\Record::deleteAll([
    'AND', 'status = :attribute_2', [
        'NOT IN', 'id',
        [1, 2]
    ]
    ], [
    ':attribute_2' => 'new'
]);

结果是:

DELETE FROM `record` WHERE (status = 'new') AND (`id` NOT IN (1, 2))

答案 1 :(得分:2)

您可以从[]功能中移除deleteAll()括号,并使用此类功能。

Model::deleteAll('attribute_1 NOT IN :attr_1_value AND attribute_2 = :attr_2_value', ['attr_1_value'=>$attribute_1_values_array,':attr_2_value'=>$attribute_2_value]);

OR

Model::deleteAll('attribute_1 NOT IN '.$attribute_1_values_array.' AND attribute_2 = '.$attribute_2_value);

删除[]将允许添加标准/自定义query

答案 2 :(得分:1)

您可以删除以下所有记录:

Model::deleteAll(
          ['AND',
            ['NOT',['attribute_1'=>$attribute_1_values_array]],  // array i.e [1,2]
            ['attribute_2'=> $attribute_2_value ]
          ]
        );

紧凑的方式:

$condition = ['AND',
  ['NOT',['attribute_1'=>$attribute_1_values_array]],
  ['attribute_2'=> $attribute_2_value ]
];

Model::deleteAll($condition);