学说:我怎样才能让所有参与者都能获得多对多的关系

时间:2010-07-29 11:53:39

标签: php doctrine

我有3个表:[“Order”,“Order_to_goods”,“Goods”]

我想通过Order_ID获得多对多关系的所有参与者,可以做类似的事情:

$Order = Doctrine::getTable('Order')->findOneById( 1 );
$Order ->loadReleated('Goods');

foreach( $Order->Goods as $product){...}

但这不起作用。尝试了我绝望的一切。你能给我一些有帮助的理事会。

加成

要获得嵌套值,需要执行一些操作:

    $this->orderObject->loadReference('StoreOrderToItem');
    foreach($this->orderObject->StoreOrderToItem as $OrderToItem)
    {
        $OrderToItem->loadReference('StoreItem');
    }

对DB的查询很少,以获得完整的对象:

SELECT s.order_id AS s__order_id, s.goods_id AS s__goods_id, s.count AS s__count, s.price AS s__price FROM store_order_to_item s WHERE (s.order_id IN (?))

SELECT s.id AS s__id, s.section_id AS s__section_id, s.payment_strategy_id AS s__payment_strategy_id, s.name AS s__name, s.title AS s__title, s.description AS s__description, s.price AS s__price, s.creation_date AS s__creation_date, s.status AS s__status, s.sort AS s__sort FROM store_item s WHERE (s.id = ?)

SELECT s.id AS s__id, s.section_id AS s__section_id, s.payment_strategy_id AS s__payment_strategy_id, s.name AS s__name, s.title AS s__title, s.description AS s__description, s.price AS s__price, s.creation_date AS s__creation_date, s.status AS s__status, s.sort AS s__sort FROM store_item s WHERE (s.id = ?)

如果DB中不只有一行或两行,则会有数千行。有必要将所有查询组合在一起(使用LEFT JOIN个操作数)。怎么办呢,如果所有关系都正确的话? Doctrine Documentation没有向我透露这个问题。我希望你能帮助我。

PS:对不起我的英语,我在30分钟以上写这个=))

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

    $q = $this->createQuery('dctrn_findProduct')
            ->from('JV_Model_StoreOrder o')
            ->leftJoin('o.StoreOrderToItem oi WITH oi.order_id = o.id')
            ->leftJoin('oi.StoreItem i WITH i.id = oi.goods_id')
            ->addWhere('o.id = ?', $order_id);

    $r = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);

他不是mysql,使用的不是简单的SQL查询。