【问题标题】:Update (save & delete) relationship without using $related->get();不使用 $related->get() 更新(保存和删除)关系;
【发布时间】:2014-04-14 14:53:26
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: codeigniter codeigniter-datamapper


    【解决方案1】:

    有一种方法可以删除您不想再关联的对象,而无需查询数据库并构建对象来删除关系。您可以使用实用函数查询运行自定义 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

    【讨论】:

    • 使用自定义查询是一个不错的解决方案,但我想使用该模型。当我更改模型的属性时,我不想在我的应用程序中搜索“自定义查询”...
    • 好吧,在这种情况下,我认为您可以在问题中更具体地说明这一点,但是好的,我可以理解您不想使用自定义查询
    • 感谢您的回答 Marcelo,但我认为我的选项(选择所有 !=...)和您的选项(自定义查询)都不是我正在寻找的解决方案。必须有另一种(更好的)方法!
    猜你喜欢
    • 2022-11-24
    • 2012-05-25
    • 2018-06-29
    • 2011-11-06
    • 1970-01-01
    • 2021-12-22
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多