Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
YII调用非对象上的成员函数getErrors()_Yii_Updatemodel - Fatal编程技术网

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;
}