对于一个动作,我需要在保存到DB之前转换$ 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语句中签入? 或者也许最好不要检查情景,而是制作另一个变量,那么如何设置2个不同情况的值呢?
我的整个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;
}
答案 0 :(得分:1)
而不是
$song = new Song();
$song->setScenario('batchcreate');
你可以简单地做
$song = new Song('batchcreate');
在beforeSave()
if ( $this->scenario != 'batchcreate' ) {
echo "good - scenario is not batchcreate";
die();
}
echo 'nope...';
var_dump($this->scenario);
die();
答案 1 :(得分:0)
切换顺序:在代码后面调用parent::beforeSave()
以检查方案。继承的方法beforeSave()
可能正在改变您的方案。