2013-03-01 34 views
0

以下this教程;當我試圖讓數據的形式顯示和更新YII調用一個非客觀的成員函數getErrors()

對於我的錯誤是:

$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

這意味着你沒有得到任何數據...再次檢查時,你得到的數據 – 2013-03-01 01:55:55

+0

隨意解釋,你在哪裏得到的錯誤,形成哪些部分組成? – TNC 2013-03-01 04:18:09

+1

更具體一點肯定會有幫助。你想單獨加載模型嗎? – 2013-03-01 09:14:17

回答

0

首先 - 鑑於

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

這部分應該是在控制器的動作不加載模型。 確保$m$n確實是型號。如果findByPk以上聲明失敗,$m將爲null,因此您將從errorSummary得到錯誤,它調用$m->getErrors()$n->getErrors()。總之 - 確保$n$m已正確初始化 - 兩者都必須是model的實例,爲空或從db填充,但在您的情況下,其中一個爲null。當NOTICIAS(即$ n是newrecord)最可能發生$m

+0

但intance $ n = new Noticias; $ m =新多媒體; - 我認爲它也是空的,但是完整 – m3mm0 2013-03-01 19:44:05

+0

但是在你看來'$ m'可能被設置爲空。在'// Validation'之前,在你的視圖中試試'var_dump' – 2013-03-02 20:18:18

0

此錯誤或$n->ID沒有發現在多媒體 如果你需要工作,即使它是一個新的記錄,你可以用你能解決這個問題。

 

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

您可以嘗試在控制器加載兩個模型(例如在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; 
} 
相關問題