2013-07-01 73 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