关注this教程;当我尝试将数据显示在表单中并更新
时我的错误是:
$n = $this->loadModel($id);
我想用一个表单制作两个模型,这是我的更新代码:
控制器:
public function actionUpdate($id)
{
$n = new Noticias;
$m = new Multimedia;
$this->performAjaxValidation(array($n,$m));
$n=$this->loadModel($id);
if(isset($_POST['Noticias'],$_POST['Multimedia']))
{
$n->attributes=$_POST['Noticias'];
$m->attributes=$_POST['Multimedia'];
$m->ID_NOT=$n->ID;
$m->setIsNewRecord(false);
if($n->save())
$this->redirect(array('admin','id'=>$n->ID));
}
$this->render('update',array('n'=>$n,'m'=>$m));
}
update.php
<?php echo $this->renderPartial('_form', array('n'=>$n, 'm'=>$m)); ?>
一些观点
//get Multimedia FK
<?php if ($n->isNewRecord==false) {
$m=Multimedia::model()->findByPk($n->ID);
} ?>
//Validation
<?php echo $form->errorSummary(array($n,$m)); ?>
//Field FOTO between other
<div class="row">
<?php echo $form->labelEx($m,'FOTO_URL'); ?>
<?php echo $form->textField($m,'FOTO_URL',array('size'=>25,'maxlength'=>100)); ?>
<?php echo $form->error($m,'FOTO'); ?>
</div>
答案 0 :(得分:0)
首先 - 不要在视图中加载模型
<?php if ($n->isNewRecord==false) {
$m=Multimedia::model()->findByPk($n->ID);
} ?>
这部分应该是控制器动作。
确保$m
和$n
确实是模型。如果上述findByPk
语句失败,则$m
将为null
,因此errorSummary
会收到$m->getErrors()
和$n->getErrors()
的错误。简而言之 - 确保$n
和 $m
已正确初始化 - 两者都必须是模型的实例,为空或从db填充,但在您的情况下,一个是{{ 1}}。最有可能是null
答案 1 :(得分:0)
当Noticias(即$ n是newrecord)或多媒体中找不到$n->ID
时会发生此错误
你可以解决这个问题,如果你需要工作,即使你可以使用它的新记录。
if ($n->isNewRecord==false) {
$m=Multimedia::model()->findByPk($n->ID);
}
else
$m=new Multimedia;
答案 2 :(得分:0)
您可以尝试在Controller中加载两个模型(例如,在actionUpdate中):
public function actionUpdate($id)
{
$n = new Noticias;
$m = new Multimedia;
$this->performAjaxValidation(array($n,$m));
$n=$this->loadModelNoticias($id);
$m=$this->loadModelMultimedia($n->ID); //just put it here..
if(isset($_POST['Noticias'],$_POST['Multimedia']))
{
$n->attributes=$_POST['Noticias'];
$m->attributes=$_POST['Multimedia'];
$m->ID_NOT=$n->ID;
$m->setIsNewRecord(false);
if($n->save())
$this->redirect(array('admin','id'=>$n->ID));
}
$this->render('update',array('n'=>$n,'m'=>$m));
}
请注意,您还必须在同一个控制器中定义两个loadModel函数。
function loadModelNoticias($id){
$model = Noticias::model()->findByPk($id);
return $model;
}
function loadModelMultimedia($id){
$model = Multimedia::model()->findByPk($id);
return $model;
}