2012-10-15 2 views
1

Когда я удаляю «тип», я устанавливаю isActive = 0;Yii: как вызвать действие управления изнутри другого действия контроллера?

Каждого «типа» «имеет много» «причинные»

Так при отключении типа я хочу отключить весь причинную

в типа контроллер я пытаюсь это

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

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

$model->save(); 

Это не работает (ошибка PHP при вызове ajax)

+0

Какая ошибка PHP вы получаете? Кстати, вам не нужно импортировать 'CasualController'? –

ответ

5

Это должно идти в модели, а не контроллер, я хотел бы использовать afterSave. так в CasualType:

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

    return parent::afterSave(); 
} 

Если вы не на самом деле означает «удалить», но дезактивировать вы все еще можете сделать это в одном запросе с помощью CActiveRecord::updateAll:

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

    return parent::afterSave(); 
} 

Инстанцирование контроллер в другой контроллер делает не имеет смысла, контроллеры должны обрабатывать пользовательские запросы, а не вести бизнес-логику.

+0

Это прекрасная идея, но мне нужно «удалить» запись не в строгих терминах, я должен настроить isActive = 0 в каждом причине. Поэтому я буду использовать afterSave с foreach, чтобы установить и переустановить причину – realtebo

+0

. Не обновляйте мой ответ, чтобы вы все равно могли деактивировать их, не забирая базу данных N раз – Asgaroth

0

Похож, проблема в вашем цикле foreach, если у вас уже есть вы должны иметь доступ к нему с помощью $ model-> causal. Если это не работает, проверьте ваши отношения работают правильно

$model = $this->loadModel($id); 
$model->isActive = 0; 
foreach ($model->causal as $item){ 
    $item->delete(); 
} 
$model->save(); 
+1

это пошло бы N раз в базу данных, где N - количество элементов в отношении – Asgaroth

0

У вас есть следующее в верхней части кода?

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

Это должно сделать это возможным.

Кроме того, используя способ Suvera, чтобы удалить элементы было бы лучше:

Еогеасп ($ модели-> causalsObj в $ ключ => $ причинная) {

$causal->delete(); 

}

Или вы можете создать функцию в CausalController, которая удаляет всю причину для данного идентификатора.

Смежные вопросы