Phalcon的保存方法没有按我的预期工作


Phalcon's save method not working as I expected

我正在尝试使用Phalcons save()函数来创建或更新记录,具体取决于该记录是否已从此处在数据库中

我正在执行以下操作:

$vars = $this->request->getPost();
$code = new Code();
$code->save( $vars, array("code_type", "code", "name") );

当我向控制器发送更新时,"id"字段填充了主键,而如果我正在创建记录,则它是空白的(但数组键仍然存在)。

我的理解是,ORM应该根据主键是否存在来创建或更新记录。我遇到的问题是它总是在创建记录 - 而不是更新。

我也尝试过类似下面的方法,但是当我使用 find 时,情况正好相反:

$code = Code::findFirst($vars["id"]);
$code->save( $vars, array("code_type", "code", "name") );

知道我可能做错了什么吗?我想达到一个点,即我的插入/更新操作只有一个控制器。

第一个示例只是创建新记录并不奇怪,因为您既没有加载现有记录,也没有在要保存的字段白名单中包含"id"。按如下方式实例化对象应该可以解决问题(假设"id"是一个整数):

$code = ($id = (int) $vars['id']) ? Code::findFirst($id) : new Code();