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();
}

如何设置每组的数量?

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

4

1 回答 1

1

啊,我发现了这篇文章: NHibernate:与关系表中的字段的多对多关系

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

现在这就是它的工作方式:

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();
    }
}

希望这也能帮助别人。

干杯,弗洛里安

于 2010-12-21T20:36:30.763 回答