在Doctrine 1中的多对多连接表中添加其他列

时间:2010-12-20 16:51:19

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

我在Orders和Sets之间建立了多对多的关系。订单可以包含许多集合,不同的集合可以属于不同的订单。因为您可以为订单中的集合设置金额,所以应该有额外的金额列。 所以例如订单可以包含5 x“Set A”和10 x“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();
}

如何设定每套的数量?

为了你的帮助,有很多对很多人。 欢呼,弗洛里安

1 个答案:

答案 0 :(得分: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();
    }
}

希望也可以帮助别人。

欢呼声, 弗洛里安