Доктрина: Как я мог получить всех участников отношений многих ко многим - PullRequest
0 голосов
/ 29 июля 2010

У меня есть 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');
    }

И несколько запросов к БД, чтобы получить полный объект:

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 операндами).Как это сделать, если все отношения налажены?Доктрина Документация не смогла раскрыть эту проблему для меня.Я надеюсь, что вы могли бы помочь мне.

PS: Извините за мой английский, я пишу это выше 30 минут =))

1 Ответ

0 голосов
/ 29 июля 2010

Я нашел решение:

    $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-запросы.

...