2

我在很长一段时间内都在与一个问题作斗争,但我找不到解决问题的好方法。

假设我有两张桌子:

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 的 Model 似乎很神奇)。

编辑:添加代码

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

模型关系:

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()
}

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

4

1 回答 1

1

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

1)首先,$tfs_array从哪里来?

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

UsersTelephones3)如果您只想保存新名称,为什么还要迭代地添加对象?你可以像这样:

$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-充满信心 https://docs.phalconphp.com/en/3.2/db-models-relationships#updating-related-records

于 2017-12-23T20:33:36.193 回答