我们有两个型号
class Base extends AbstractModel
{
public $id;
public $name;
public function tableName()
{
return 'table_base';
}
}
class ExtendBase extends AbstractModel
{
public $id;
public $baseID;
public function tableName()
{
return 'table_base_extend';
}
}
我不会描述所有内容,只会描述主要内容。
所以,现在我想创建将这些表单组合起来的表单。并希望在行动中做这样的事情
public function actionSome ()
{
$oBase = new Base();
$aExtendBase = array(); // important this is array
for ($i = 1; $i <= 3; $i++) {
$aExtendBase[] = new Extend(); // fill in array, pre-create for form
}
if ($this->isPost()) { // protected custom method
if (isset($_POST['Base'], $_POST['ExtendBase'])) // here should be specific checker because we have several ExtendBase instances in form
{
// save Base model
// save each ExtendBase model
}
}
$this->render('formView', array('oBase' => $oBase, 'aExtendBase' => $aExtendBaes))
}
所以问题是
答案 0 :(得分:0)
参见Yii WIKI上的解决方案
http://www.yiiframework.com/wiki/19/how-to-use-a-single-form-to-collect-data-for-two-or-more-models/
答案 1 :(得分:0)
您可以为单个表单创建一个不代表CFormModel
的模型(ActiveRecord
)。
我认为这将是您继续进行的最佳方式(假设我已正确理解您的问题)。
如果我是你,我会创建一个模型来代表这个表单的规则(就像我说的,CFormModel
的实例,而不是ActiveRecord
)然后,在你的控制器中,拿走提交的元素并手动创建和/或更新两个类的对象。