Join 更新ORM命令中的联接字段

Join 更新ORM命令中的联接字段,join,orm,Join,Orm,我有一个关于连接字段的对象关系更新的问题 我正在使用codeigniter和datamapper dmz进行一个项目。但我认为我的问题在于对ORMs的一般理解。所以我可以自由回答你所知道的任何问题 我有两张桌子,货物和标签。一种商品可以有很多标签。一切正常,但我正在寻找一种合并标签的方法。这意味着我决定移除标记A,取而代之的是所有被标记的东西,现在被标记B标记 我只有货物的型号和标签。连接关系没有单独的模型,因为我相信这些ORM是为工作而设计的 我知道如何删除标签。但是我不知道如何进入联接表来重

我有一个关于连接字段的对象关系更新的问题

我正在使用codeigniter和datamapper dmz进行一个项目。但我认为我的问题在于对ORMs的一般理解。所以我可以自由回答你所知道的任何问题

我有两张桌子,货物和标签。一种商品可以有很多标签。一切正常,但我正在寻找一种合并标签的方法。这意味着我决定移除标记A,取而代之的是所有被标记的东西,现在被标记B标记

我只有货物的型号和标签。连接关系没有单独的模型,因为我相信这些ORM是为工作而设计的

我知道如何删除标签。但是我不知道如何进入联接表来重定向引用,因为联接表没有模型。我宁愿使用ORM,然后发出原始SQL命令

  • 加载带有
    标记A的所有对象
  • 删除
    标记A
  • 检查对象是否有标签B;如果没有,请添加它
  • 拯救一切

  • 这听起来像是应用程序语言中需要做的事情。例如,对于Java:

    Good myGood = new Good("My Good");
    Good yourGood = new Good("Your Good");
    
    Tag mine = new Tag("mine");
    Tag yours = new Tag("yours");
    
    myGood.tag(mine);
    yourGood.tag(yours);
    
    /** Persist tags to database */
    mine.save();
    yours.save();
    
    /** Persist goods to database */
    myGood.save();
    yourGood.save();
    
    /** I take your good */
    yourGood.tag(mine);
    yourGood.removeTag(yours);
    
    /** Update database */
    yourGood.update();
    
    /** Get my goods */
    List<Good> myGoods = dao.getGoodsWithTag(mine);
    log.info(yourGoods.size());  // 2
    log.info(myGoods.get(0));  // "My Good"
    log.info(myGoods.get(1));  // "Your Good"
    
    /** Get your goods */
    List<Good> yourGoods = dao.getGoodsWithTag(yours);
    log.info(yourGoods.size());  // 0
    
    /** Make all of your goods mine */
    
    /** Get your goods */
    List<Good> yourGoods = dao.getGoodsWithTag(yours);
    for (Good yoursRightNow : yourGoods) {
        yoursRightNow.tag(mine);
        yoursRightNow.removeTag(yours);
        yoursRightNow.update();  // Or do this later as a transaction
    }
    
    /** Make all of your goods mine through SQL */
    dao.sendSql("UPDATE goods_tags SET tagId = " + mine.getId() + " WHERE tagId = " + yours.getId() + ";");
    dao.sendSql("DELETE FROM tags WHERE tag = \"yours\";");