1

「タイプ」を削除すると、isActive = 0; に設定されます。

すべての「タイプ」には「多くの」「因果関係」があります

したがって、タイプを無効にするときは、すべての因果関係を無効にしたい

タイプコントローラーで私はこれを試しています

$model = $this->loadModel($id);
$model->isActive = 0;

foreach ($model->causalsObj as $key => $causal ) {
   $causal = CausalController::delete($causal->id);
}

$model->save();

これは機能しません (ajax 呼び出し中の PHP エラー)

4

3 に答える 3

5

それはコントローラーではなくモデルに入る必要があります。私はafterSaveを使用します。したがって、CasualType では次のようになります。

public function afterSave(){
   if(!$this->isActive){
       Casual::model()->deleteAll('type_id = '.$this->id);
   }

   return parent::afterSave();
}

実際に「削除」を意味するのではなく非アクティブ化する場合でも、CActiveRecord::updateAllを使用して 1 つのクエリでこれを行うことができます。

public function afterSave(){
   if(!$this->isActive){
       Casual::model()->updateAll(array('isActive' => 0), 'type_id = '.$this->id);
   }

   return parent::afterSave();
}

別のコントローラーでコントローラーをインスタンス化することは意味がありません。コントローラーは、ビジネスロジックを保持するためではなく、ユーザーリクエストを処理するために存在します

于 2012-10-15T13:58:31.540 に答える
0

問題は foreach ループにあるようです。すでに関係が設定されている場合は、$model->causal でアクセスできるはずです。それでもうまくいかない場合は、関係が正しく機能していることを確認してください

$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causal as $item){
   $item->delete();
}
$model->save();
于 2012-10-15T13:56:52.697 に答える
0

コードの先頭に次のものがありますか?

Yii::import('application.models.CausalController');

これで可能になるはずです。

また、項目を削除する SuVeRa の方法を使用する方が良いでしょう:

foreach ($model->causalsObj as $key => $causal ) {

   $causal->delete(); 

}

または、指定された ID のすべての原因を削除する関数を CausalController に作成することもできます。

于 2012-10-15T21:02:41.027 に答える