2014-02-21 40 views
0

這是一個模型爾康更新模型總是返回成功

class Test1 extends \Phalcon\Mvc\Model{ 

/** 
* @var integer 
*/ 
public $sn; 

/** 
* 
* @var string 
*/ 
public $name; 

和控制器

$t1 = Test1::findFirst(1); 
$t1->wrongName = 'column name not exist'; 

if ($t1->save() == false) { 
echo "Umh, We can't store robots right now: \n"; 
foreach ($acg->getMessages() as $message) { 
    echo $message, "\n"; 
} 
} else { 
    echo "Great, a new robot was saved successfully!"; 
} 

$t1->wrongName不是一個存在的列名,但$t1->save()總是返回true;

如果我創建一個新Test1 data and save(),它將檢查屬性的名稱,並返回"name is required",只更新了這個問題.....

它困擾了我很多。因爲在交易中,如果有人編寫錯誤的列名,它不會回滾........

是否有任何配置可以使此檢查更嚴格?

謝謝!

回答

0

如下您可以擴展您的基本模型:

class BaseModel extends \Phalcon\Mvc\Model{ 
{ 
    private $fields = []; 

    public function __call($function, $arguments) 
    { 
     /** 
     * getSocialSecurity becomes SocialSecurity 
     */ 
     $metaFunction = substr($function, 3); 
     $field  = array_search($metaFunction, $this->fields); 

     if (FALSE !== $field) { 

      $prefix = substr($function, 0, 3); 

      switch ($prefix) { 
       case 'get': 

        return $this->getField($field); 
        break; 

       case 'set': 

        $this->setField($field, $arguments); 
        break; 
      } 

     } else { 
      throw new \Exception('Function does not exist'); 
     } 
    } 


    protected function getField($field) 
    { 
     return $this->$field; 

    } 

    protected function setField($field, $value) 
    { 
     $this->$field = $value; 
    } 

} 

的$字段變量包含一個getter和setter工作模型中的領域和功能的關係。因此,在下面getSocialSecurity的例子將返回$this->sn

class Test1 extends BaseModel 
{ 
    public function initialize() 
    { 
     parent::initialize(); 

     $this->fields['name'] = 'Name'; 
     $this->fields['sn'] = 'SocialSecurity'; 
    } 
} 

如果你設置你所有的模型和$fields陣列中的相關元數據,你會避免你描述的,因爲一個異常會立即拋出的錯字問題作爲一個吸氣/二傳手不存在。