2011-12-01 58 views
1

我使用PHP Yii Framework和MongoDB(yiimongodbsuite)。我創建了一個從EMongoDocument擴展的模型。YII中的setAttribute()函數無法正常工作

<?php 

class MyModel extends EMongoDocument 
{ 
    public $attr1; 
    public $attr2; 

    // rules, custom validations and other functions.... 

    public function setAttributes($values, $safeOnly=true) 
    { 
     if(!is_array($values)) 
     return; 

     if($this->hasEmbeddedDocuments()) 
     { 
     $attributes=array_flip($safeOnly ? $this->getSafeAttributeNames() : $this->attributeNames()); 

     foreach($this->embeddedDocuments() as $fieldName => $className) 
      if(isset($values[$fieldName]) && isset($attributes[$fieldName])) 
      { 
       $this->$fieldName->setAttributes($values[$fieldName], $safeOnly); 
       unset($values[$fieldName]); 
      } 
     } 

    parent::setAttributes($values, $safeOnly); 
    } 
    } 

在控制器,

$dataModel = new MyModel(); 
$dataModel->setAttributes($_POST['MyModel']); 
if($dataModel->validate()){ 
    $dataModel->save(); 
} 

上面的代碼不設置屬性值。 請讓我知道是否有任何錯誤。

+0

你有沒有在安全列表中的屬性?如果您調試代碼,無法設置 - >屬性? – Pentium10

+0

@ Pentium10這些屬性不僅是字符串,而且也是數組格式...並且它無法設置屬性,但在調用save()方法時沒有給出任何錯誤。但數據未保存在數據庫中。 –

+1

您需要調試,然後在調用保存之前查看屬性中是否有值。 – Pentium10

回答

0

嘗試確定您有valdation錯誤:

if(!$model->validate()) { 
    die(print_r($model->getErrors())); 
}