我在很长一段时间内遇到问题,我找不到解决问题的好方法。
假设我有两张桌子:
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()
}
感谢阅读,请原谅我糟糕的英语。
答案 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