0

遵循教程;当我尝试让数据显示在表单中并更新时

因为我的错误是:

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

更新.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>
4

3 回答 3

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;
}
于 2013-03-04T09:57:23.723 回答
0

当 Noticias(即 $n 是新记录)或$n->ID在多媒体中找不到时会发生此错误,如果您需要工作,即使它是您可以使用的新记录,您也可以解决此问题。


if ($n->isNewRecord==false) {
    $m=Multimedia::model()->findByPk($n->ID);
}    
else
 $m=new Multimedia;

于 2013-03-03T21:12:41.803 回答
0

首先 - 不要在视图中加载模型

<?php if ($n->isNewRecord==false) { 
    $m=Multimedia::model()->findByPk($n->ID);
} ?>

这部分应该在控制器动作中。确保$m并且$n是真正的模型。如果findByPk上面的语句失败,$mwill be null,所以你会从errorSummarywhich calls $m->getErrors()and得到错误$n->getErrors()。简而言之 - 确保$n $m正确初始化 - 两者都必须是模型的实例,要么是空的,要么是从 db 填充的,但在你的情况下,一个是null. 最可能$m

于 2013-03-01T18:20:06.533 回答