代码之家  ›  专栏  ›  技术社区  ›  ajile

信条:我怎样才能让所有的参与者都有多对多的关系呢?

  •  0
  • ajile  · 技术社区  · 15 年前

    我有3张表:【订单】、【订单货物】、【货物】

    我想让所有参与多对多关系的人按顺序做一些类似的事情:

    $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');
        }
    

    以及对数据库的少量查询,以获得完整的对象:

    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 = ?)
    

    如果数据库中不止一行或两行,那么就有几千行。有必要在一个查询中组合所有查询(与 LEFT JOIN 操作数)。如果所有的关系都正确的话,怎么做呢? 条令文件没有为我披露这个问题。我希望你能帮助我。

    附言:对不起,我写这篇文章超过30分钟了。)

    1 回复  |  直到 15 年前
        1
  •  0
  •   ajile    15 年前

    我找到了解决方案:

        $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查询。

    推荐文章