【问题标题】:Add additional column to many-to-many join table in Doctrine 1向 Doctrine 1 中的多对多连接表添加附加列
【发布时间】:2011-05-28 08:53:58
【问题描述】:

我在 Orders 和 Sets 之间建立了多对多的关系。一个订单可以包含多个集合,不同的集合可以属于不同的订单。因为您可以在订单中为一组设置金额,所以应该有一个额外的金额列。 所以例如一个订单可以包含 5 个“Set A”和 10 个“Set B”。

这是连接表的架构:

OrderSet:columns:
amount: integer
order_id:
  type: integer
  primary: true
set_id:
  type: integer
  primary: true

到目前为止工作正常,我只是不知道如何设置金额列的值。

这就是我保存订单/设置订单关系的方式:

public function saveOrder($data){
    $tempSets = $data->sets;
    $order = new Order();
    unset($data->sets);
    $order->merge((array) $data);

    foreach($tempSets as $set){
        $q = Doctrine_Query::create()
        ->from('Set s')
        ->where('s.id = ?', $set->id);
        $set = $q->fetchOne();
        $order->sets->add($set);
    }
    $order->save();
}

如何设置每组的数量?

多对多感谢您的帮助。 干杯,弗洛里安

【问题讨论】:

    标签: doctrine many-to-many doctrine-1.2


    【解决方案1】:

    啊,我发现了这篇文章: NHibernate: Many-to-many relationship with field in the relationship table

    他们说...将关系表视为实体。

    现在就是这样:

    public function saveOrder($data){
        $tempSets = $data->sets;
        $order = new Order();
        unset($data->sets);
        $order->merge((array) $data);
        $order->save(); //save order first to make the order id available
    
        foreach($tempSets as $set){         
            $orderSet = new OrderSet(); //create an object of the Class representing the relation table
            $orderSet->order_id = $order->id;
            $orderSet->set_id = $set->id;
            $orderSet->amount = $set->amount;
            $orderSet->save();
        }
    }
    

    希望这也可以帮助其他人。

    干杯, 弗洛里安

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2016-01-09
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      相关资源
      最近更新 更多