我正在尝试使用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();