更新(保存和删除)关系,而不使用$ related-> get();

时间:2014-04-14 14:53:27

标签: codeigniter codeigniter-datamapper

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

有什么想法吗?

1 个答案:

答案 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