Phalcon - ORM更新并保存导致重复的条目

时间:2017-12-23 06:23:15

标签: model-view-controller orm phalcon phalcon-orm

我在很长一段时间内遇到问题,我找不到解决问题的好方法。

假设我有两张桌子:

uses (id, name)

uses_phone (id, user_id, phone)

假设我创建了users (1, 'Mary')和她的手机users_phones (1, 1, '123') (2, 1, '333')

如果我想更新Mary,将她的名字改为“Maria”:

save()方法不会删除users_phone中的实际记录,但会删除insert个新条目,然后我会:

1, 1, 123 2, 1, 333 3, 1, 123 4, 1, 333

哪个是解决此问题的最佳方法?我有点困惑。我喜欢使用Model而不是PHQL(我也喜欢它,但带有ORM的模型似乎很神奇)。

编辑:添加代码

我已更新我的帖子以包含模型关系和我的控制器的简化版本

模型关系:

class Users {
  ...
  $this->hasMany('xid', 'UsersTelephones', 'xid_user', ['alias' => 'UsersTelephones']);
  ...
}

class UsersTelephones { 
   ...
   $this->belongsTo('xid_user', '\Users', 'xid', ['alias' => 'Users']);
   ...
}

(非常简化)控制器代码:

function update($xid) {
   ...
   $user = Users::findFirstByXid($xid);
   // $user->email = "..";

   $user_tfs = array();
   for ($i=0;$i<count($tfs_array);$i++)
   {
      $user_tfs[$i] = new UsersTelephones();
      $user_tfs[$i]->tf_number = $tfs_array[$i];
   }
   $user->UsersTelephones = $user_tfs;

   // ...

   $user->save()
}

感谢阅读,请原谅我糟糕的英语。

1 个答案:

答案 0 :(得分:1)

查看您的控制器代码,我有一些建议:

1)首先,$tfs_array来自何处?

2)您可能还想将现有电话记录id添加到$user_tfs[$i]对象,例如:$user_tfs[$i]->id = $tfs_array[ID_OF_RECORD];(您需要将记录ID添加到$tfs_array })。这样,ORM可以解释该记录已经存在,因为该对象具有id主键。

3)如果您想要保存新名称,为什么要迭代添加UsersTelephones个对象?你可以这样:

$user = Users::findFirstByXid($xid);
$user->name = 'New Name';
$user->save();

4)您也可以调用$model->update()方法而不是save()

以下是更多链接: https://docs.phalconphp.com/en/3.2/db-models#create-update-records https://docs.phalconphp.com/en/3.2/db-models#create-update-with-confidence https://docs.phalconphp.com/en/3.2/db-models-relationships#updating-related-records