2016-07-01 28 views
0

這裏我使用Yii2來開發應用程序。與Yii1略有不同。在開發過程中,我只是停留在一個地方,我需要一個區域的刪除功能。 刪除從DB某些行我使用deleteAll()方法如下所示:Yii2根據等於條件和不在條件刪除所有行

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

據工作對我罰款。但現在我想另一個條件附加到此刪除功能,如:

<attribute_2>=<attribute_2_value> 

我知道我們可以用where()添加與delete()條件,然後我用這個方法deleteAll()嘗試過。但它並不支持。

這裏我需要在相同的查詢中將not in條件和equal to條件組合在一起。

任何幫助將不勝感激。

回答

2

這裏是如何我通常這樣做:

\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)) 
+0

好的。讓我試試這個:) –

+0

所以告訴我們所有人,是否爲你工作? –

1

您可以從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