我正在使用codeigniter 2.1.4& datamapper orm。我知道如何save relations对象,我知道如何delete them。
在这种情况下,我有一个多对多关系,我想用表单中的新值更新。现在我可以用它来保存它们,它们运行得很好:
$ousergroupright = new Usergroupright;
$usergrouprights = $ousergroupright->where_in('id', $this->input->post('usergrouprights'))->get();
$ousergroup = new Usergroup;
$ousergroup->get_by_id($id);
$ousergroup->save($usergrouprights->all);
但这并没有删除我在表单中“取消选中”的记录。我需要删除我不想再相关的对象。最好的方法是什么(不使用自定义查询)?
在保存之前使用$ousergroup->where_not_in()
之类的上述查询对我来说似乎有点过分(为什么查询数据库和构建对象只是来删除关系?):
$ousergroupright = new Usergroupright;
$usergrouprights = $ousergroupright->where_not_in('id', $this->input->post('usergrouprights'))->get();
$ousergroup = new Usergroup;
$ousergroup->get_by_id($id);
$ousergroup->delete($usergrouprights->all);
有什么想法吗?
答案 0 :(得分:0)
有一种方法可以删除您不想要相关的对象,而无需查询数据库和构建对象只是为了删除关系。您可以使用实用程序函数查询运行自定义SQL来删除所有不相关的对象而无需执行数据库查询,如:
// Create usergroup object
$u = new Usergroup();
// your custom SQL query to delete the unrelated objects
$sql = "delete from usergrouprights where usergroup.id = ? and id usergrouprights.id not in (?)";
// Binding values
$binds = array($idUserGroup , $listOfSelectedItens);
// Run query to populate user object with the results
$u->query($sql);
有关DataMapper查询实用程序功能的更多信息 http://datamapper.wanwizard.eu/pages/utility.html#query