【发布时间】:2014-11-27 09:00:07
【问题描述】:
对于一项操作,我需要先转换 $album_id,然后再将其保存到数据库 在模型函数 beforeSave() 我做:
// преобразовать album -> album_id
$album_id=array();
foreach($this->string2array($this->album, '\|') as $one)
$album_id[]=Album::model()->findByAttributes(array('album' => $one))->id;
$this->album_id = $this->array2string($album_id);
但对于另一个操作,我不需要此转换,因为 $album_id 已经处于正确状态。所以我在那个动作中设置了场景'batchcreate':
public function actionCreate()
{
Yii::import('ext.multimodelform.MultiModelForm');
$model = new Album('create');
$song = new Song();
$song->setScenario('batchcreate');
...
}
并尝试在模型中检查这种情况:
if(!($this->scenario === 'batchcreate')) {
// преобразовать album -> album_id
$album_id=array();
foreach($this->string2array($this->album, '\|') as $one)
$album_id[]=Album::model()->findByAttributes(array('album' => $one))->id;
$this->album_id = $this->array2string($album_id);
}
但条件始终为真。为什么我的方案未设置或未签入 if 语句? 或者最好不要检查场景,而是制作另一个变量,那么如何为两种不同的情况设置它的值?
我的全部 beforeSave():
protected function beforeSave()
{
if(parent::beforeSave())
{
// преобразовать whoes -> who
$who=array();
foreach($this->string2array($this->whoes) as $one) {
$userrow = User::model()->findByAttributes(array('username' => $one));
if($userrow) $who[]=CHtml::encode($userrow->id);
else $who[]=$one;
}
$this->who = $this->array2string($who);
//var_dump( $this->scenario );
if(!($this->scenario == 'batchcreate')) {
//if($this->notbatchcreate == 'yes') {
// преобразовать album -> album_id
$album_id=array();
foreach($this->string2array($this->album, '\|') as $one)
$album_id[]=Album::model()->findByAttributes(array('album' => $one))->id;
$this->album_id = $this->array2string($album_id);
}
return true;
}
else
return false;
}
【问题讨论】:
-
专辑和歌曲的基类是什么?
-
类 Song 扩展 ActiveRecord;类专辑扩展 ActiveRecord
-
你试过 var_dump( $this->scenario ) 吗?您在哪里执行此检查?你的模型是什么方法?
-
我在受保护的函数 beforeSave() 中执行此检查模型; Valentin,我创建变量而不是场景并检查它 - if($this->notbatchcreate == 'yes'),在一个控制器操作中,我将其设置为 $model->notbatchcreate = 'yes';但在另一个没有。所以它有效。但是为什么场景不起作用我无法理解
-
'insert' 是在 CActiveRecord 的构造函数中设置的默认场景。很难说在你的问题中看代码的小sn-p有什么问题。
标签: yii behavior scenarios before-save