2013-07-01 115 views
2

我嘗試用Yii的活動記錄刪除數據庫中的條目。但我認爲它真的很奇怪。 我要刪除我的表中的所有記錄,其中vehicle_id =給定的ID和plug_id NOT IN(指定字符串)活動記錄刪除工作爲false

我嘗試了很多的方法並沒有什麼工作,但這個

$query = "delete from `vehicle_details` where `vehicle_id`= ".$vehicle->id." AND `plug_id` NOT IN (".implode(',', array_map(function($item) { 
            return $item->type; 
           }, $vehicleDetails->plug)).")"; 
     $command = Yii::app()->db->createCommand($query); 
     $command->execute(); 

但爲什麼ISN」這工作?

VehicleDetail::model()->DeleteAllByAttributes(
     array('vehicle_id' => $vehicle->id), 
     array('condition' => 'plug_id NOT IN (:ids)', 
      'params' => array('ids' => implode(',', array_map(function($item) { 
            return $item->type; 
           }, $vehicleDetails->plug))))); 

或者這樣:

VehicleDetail::model()->deleteAll(' vehicle_id = :vehicleId AND plug_id NOT IN (:ids)', array('vehicleId' => $vehicle->id, 'ids' => implode(',', array_map(function($item) { 
           return $item->type; 
          }, $vehicleDetails->plug)))); 

但是,如果我讓和屬性出此查詢它運作良好,並返回正確的數據的查找。

我希望你能解釋給我。

回答

4

由於方法中傳遞的參數錯誤,您的代碼不起作用。當YII嘗試使用數組參數構建CDbCriteria對象時,會發生問題。有意思的是,你可以自己構建一個CDbCriteria並直接將它傳遞給方法。猜測在這種情況下,使用CDbCriteria對象來解決這個問題會更容易。

$dbc = new CDbcriteria(); 
$dbc->condition = 'vehicle_id = :vehicleId'; 
$dbc->params = array(':vehicleId'=>$vehicle->id); 
$dbc->addNotInCondition(
    'plug_id', 
    array_map(
     function($item) { 
      return $item->type; 
     }, 
    $vehicleDetails->plug) 
); 
VehicleDetail::model()->deleteAll($dbc); 

這就是你所需要的。

+0

非常感謝! – EvilKarter