2013-07-01 3 views
2

Yii의 활성 레코드가있는 데이터베이스의 항목을 삭제하려고합니다. 그러나 나는 그것이 정말로 이상하게 작동한다고 생각한다. 내가 내 테이블의 모든 레코드를 삭제하려는 vehicle_id = 지정된 ID와 plug_id NOT IN (주어진 문자열)활성 레코드 삭제가 작동하지 않습니다.

나는 많은 방법을 시도하고 아무 일 없지만,이

$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 객체를 만들려고 할 때 문제가 발생합니다. Fortunetly, 당신은 직접 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

관련 문제