0

このチュートリアルに従います。フォームに表示するデータを取得して更新しようとすると

私のエラーは次のとおりです。

$n = $this->loadModel($id);

1 つのフォームで 2 つのモデルを作成したいのですが、これは更新用のコードです。

コントローラ:

    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>
4

3 に答える 3

0

まず - モデルをビューにロードしないでください

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

この部分はコントローラのアクションにある必要があります。確認$m$nて、本当にモデルです。上記findByPkのステートメントが失敗した場合は に$mなるため、 which 呼び出しおよびnullからエラーが発生します。要するに、 とが適切に初期化されていることを確認してください。どちらもモデルのインスタンスであるか、空であるか、db から入力されている必要がありますが、あなたの場合は. おそらくerrorSummary$m->getErrors()$n->getErrors()$n $mnull$m

于 2013-03-01T18:20:06.533 に答える
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 が newrecord) で発生するか$n->ID、マルチメディアで見つからない場合に発生します。使用できる新しいレコードであっても作業する必要がある場合は、これを解決できます。


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

于 2013-03-03T21:12:41.803 に答える