1

私はmysqlクエリ:

SELECT p.name, c.id 
FROM customer c  
INNER JOIN sales_order so ON so.customer_id=c.id  
INNER JOIN sales_order_item soi ON so.id=soi.sales_order_id  
INNER JOIN product p ON p.id=soi.product_id  WHERE c.id=49454\G;

これはMySqlで機能していますが、このクエリがdoctrine2で変換されるとエラーが発生します

"[Semantical Error] line 0, col 87 near 'so ON so.customer_id=c.id': Error: Identification Variable sales_order used in join path expression but was not defined before."

symfony 形式では、次のように書きます。

$builder
        ->add('filter', 'entity', array(
            'label' => 'Show',
            'class' => 'RocketBraPrintBundle:SalesOrderItem',
            'query_builder' => function($er) {
                return $er->createQueryBuilder('p','so','c','soi')
                          ->select('p.name','c.id')
                          ->from('customer','c')
                          ->innerJoin('sales_order','so','ON','so.customer_id=c.id')
                          ->innerJoin('sales_order_item','soi','ON','so.id=soi.sales_order_id')
                          ->innerJoin('product','p', 'ON', 'p.id=soi.product_id')
                          ->where('c.id=49454\G');
            },
            'empty_value' => 'All',
            'required' => false
        ))

このmysqlクエリをsymfony2の方法で変換する正しい方法を教えてもらえますか?

4

2 に答える 2

0

私は少し混乱していて、このように変換されているので複雑です。ユーザーがログインした場合は機能します。

$er->createQueryBuilder('soi')
   ->select('soi','p','so')
   ->innerJoin('soi.salesOrder', 'so')
   ->innerJoin('soi.product', 'p')
   ->innerJoin('so.customer', 'c')
   ->groupBy('p.name')
   ->orderBy('p.name', 'ASC')
   ->where('so.customer = ' . $options['data']['customerid']);
于 2013-04-08T13:55:06.003 に答える
0
->innerJoin('c.sales_order')

ここで、「sales_order」は「顧客」エンティティからの正確なリレーション名です。

于 2013-04-08T06:45:33.500 に答える