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,就会引发异常