YII调用非对象上的成员函数getErrors()
以下教程;当我尝试获取要在表单中显示的数据并进行更新时 因为我的错误是:YII调用非对象上的成员函数getErrors(),yii,updatemodel,Yii,Updatemodel,以下教程;当我尝试获取要在表单中显示的数据并进行更新时 因为我的错误是: $n = $this->loadModel($id); 我想用一个表单制作两个模型,这是我的更新代码: 控制器: public function actionUpdate($id) { $n = new Noticias; $m = new Multimedia; $this->performAjaxValidation(array($n,$m)); $n=$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>
//获取多媒体FK
//验证
//字段FOTO在其他字段之间
首先-不要在视图中加载模型
<?php if ($n->isNewRecord==false) {
$m=Multimedia::model()->findByPk($n->ID);
} ?>
此部件应处于控制器操作状态。
确保
$m
和$n
是真正的型号。如果上面的findByPk
语句失败,$m
将为null
,因此您将从调用$m->getErrors()
和$n->getErrors()
的errorSummary
中获得错误。简而言之-确保$n
和$m
已正确初始化-这两个实例都必须是模型实例,可以是空的,也可以是从数据库填充的,但在您的情况下,其中一个是空的
。在多媒体中找不到通知(即$n为新记录)或$n->ID
时,很可能发生此错误
如果您需要工作,您可以解决此问题,即使您可以使用新记录
if ($n->isNewRecord==false) {
$m=Multimedia::model()->findByPk($n->ID);
}
else
$m=new Multimedia;
您可以尝试在Controller中加载这两个模型(例如在actionUpdate中): 请注意,您还必须在同一控制器中定义两个loadModel函数
function loadModelNoticias($id){
$model = Noticias::model()->findByPk($id);
return $model;
}
function loadModelMultimedia($id){
$model = Multimedia::model()->findByPk($id);
return $model;
}
这意味着你没有得到任何数据。。。当您获得数据时,请再次检查。请随意解释,您从哪里获得的错误来自哪些部分?更具体一点肯定会有所帮助。您是否尝试单独加载模型?但intance$n=新通知$m=新多媒体;——我认为它也是空的,但同样是满的,但是在您的视图中,
$m
可能被设置为空。在验证之前,在您的视图中尝试var\u dump
function loadModelNoticias($id){
$model = Noticias::model()->findByPk($id);
return $model;
}
function loadModelMultimedia($id){
$model = Multimedia::model()->findByPk($id);
return $model;
}