2013-05-10 1 views
0

작동하지 않습니다 정렬 된 레코드에서. 그러나이 코드는 작동하지 않습니다. 제안 테이블에서 필드를 업데이트하지 않고 작업 테이블에서 작업을 삭제합니다. 어떻게 해결할 수 있습니까?beforeDelete 기능은 <code>beforeDelete</code> 기능을 다음과 같은 모델 작업이 있습니다

업데이트 : 난 그냥 내 코드를 업데이 트했습니다

$model=Proposal::model()->findAllByAttributes(array('task_id'=>$this->id)); 
foreach ($model as $proposal) 
{ 
    $proposal->task_id=null; 
    $proposal->task_result=null; 
    $proposal->update(); 
} 
parent::beforeDelete(); 

하지만 아직 작동하지 않습니다.

+1

가 -'findAll'가 배열이 아닌 객체를 반환, 그리고 당신이 어떤 권한을 반환하지 않는 실제로 레코드를 지우려면 ... findAllByAttributes 행을 제거하고 조정 된 검색 조건을 두 번째 인수로 updateAll로 전달하십시오. – DCoder

+0

제발, 업데이트를 보아라. – user2218845

답변

2

당신은 단순히 (findAllByAttributes를 사용할 필요)를 시도해서는 안 : DCoder이 코멘트에, 그것이 최선의 방법입니다 말했다

Proposal::model()->updateAll(
    array('task_id'=>null, 'task_result'=>null), 
    'task_id=:task_id', 
    array(':task_id'=>$this->id) 
); 
return parent::beforeDelete(); 

으로.

그리고 케빈 히긴스은 대답에서 말했다, 당신은 parent::beforeDelete()을 반환해야합니다.

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#updateAll-detail

아니면 여전히 findAllByAttributes를 사용하려면 :

$models = Proposal::model()->findAllByAttributes(array('task_id'=>$this->id)); 
foreach ($models as $proposal) 
{ 
    $proposal->update(array('task_id'=>null, 'task_result'=>null)); 
} 
return parent::beforeDelete(); 

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#update-detail

또는 :

$models = Proposal::model()->findAllByAttributes(array('task_id'=>$this->id)); 
foreach ($models as $proposal) 
{ 
    $proposal->task_id=null; 
    $proposal->task_result=null; 
    $proposal->save(); 
} 
return parent::beforeDelete(); 

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail

+1

첫번째 2 개의 옵션이 제 3의 옵션보다 비싸다는 것에 주목할 가치가있다. 1 쿼리는 레코드를 가져오고 N 쿼리는 업데이트하고 세 번째 경우에는 1 쿼리 만 사용합니다. – DCoder

+0

물론이 점에 대해 언급해야합니다. 감사합니다. 답변이 업데이트되었습니다 (재정렬). – soju

1

오리지널 삭제 코드 외에도 parent :: beforeDelete()의 결과를 반환해야합니다.

귀하의 코드 (소주의 세 번째 추천 사용)과 같이한다 :이 전혀 작동하지 말아야

public function beforeDelete() 
{ 
    Proposal::model()->updateAll(
     array('task_id'=>null, 'task_result'=>null), 
     'task_id=:task_id', 
     array(':task_id'=>$this->id) 
    ); 
    return parent::beforeDelete(); 
} 
관련 문제