Model 不存在列名称的Phalcon更新模型始终返回成功

Model 不存在列名称的Phalcon更新模型始终返回成功,model,transactions,phalcon,Model,Transactions,Phalcon,这是一个模型 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 c

这是一个模型

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->ErrorName
不是存在的列名,但
$t1->save()
始终返回true

如果我创建一个新的
Test1数据并保存()
,它将检查属性名称并返回
“name is required”
,只有更新有此问题

这让我很烦恼。因为在事务中,如果有人编码错误的列名,它将不会回滚

是否有任何配置可以使此检查更严格


谢谢

您可以按如下方式扩展基本模型:

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;
    }

}
$fields变量包含模型中getter和setter工作的字段和函数关系。因此,在下面的示例中,
getSocialSecurity
将返回
$this->sn

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

        $this->fields['name'] = 'Name';
        $this->fields['sn']   = 'SocialSecurity';
    }
}
如果在
$fields
数组中设置所有模型及其相关元数据,则可以避免您描述的输入错误问题,因为一旦不存在getter/setter,就会引发异常