2014-02-21 32 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阵列中的相关元数据,你会避免你描述的,因为一个异常会立即抛出的错字问题作为一个吸气/二传手不存在。