这是一个模型
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 :(得分: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;
}
}
$ 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不存在就会抛出异常。