2013-04-08 68 views
1

我MySQL查詢:innerJoin查詢在Symfony2中

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

任何人都可以告訴我什麼是以symfony2方式轉換此mysql查詢的正確方法?

回答

0
->innerJoin('c.sales_order') 

其中「sales_order」是與「客戶」實體的確切關係名稱。

+0

感謝答覆,我寫這BT我再次得到了錯誤「[語義錯誤] 0行,列92‘附近的SOI ON soi.sales_order_item = soi.id’:錯誤:標識變量sales_order_item用於聯接路徑表達,但之前沒有定義。「 – Sid 2013-04-08 07:11:05

+0

sales_order - 這需要是實體類中出現的確切關係名稱。不是數據庫表名。我把sales_order放在了原因上,我認爲這就是你使用的名字。 – Viorel 2013-04-13 15:16:42

0

它對我來說很複雜,因爲我有點混亂,它的轉換就像this.It的working.if用戶logedIn。

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