2

こんにちは、Magento で結合を追加するのに苦労しています。できることはわかっていますが、式$collection->getSelect()->joinを追加する必要があります。Count()

私が具体的に達成しようとしているのは、次のクエリです。

SELECT `e`.*, COUNT(sfoi.product_id) as `count`
FROM `catalog_product_entity` 
AS `e` 
LEFT JOIN sales_flat_order_item sfoi
ON sfoi.product_id = e.entity_id 
ORDER BY `e`.`entity_id` asc, 
`e`.`entity_id` asc 

編集:

これは今のように見えるものです:

$e = Mage::getModel('catalog/product')->getCollection()->getSelect();
$e->join(array('c' => 'sales_flat_order_item'),
'e.entity_id = c.product_id',
array('count' => 'COUNT(c.product_id)'));

これを出力すると、次のようになります。

SELECT `e`.*, COUNT(c.product_id) AS `count` FROM `catalog_product_entity` 
AS `e` INNER         
JOIN `sales_flat_order_item` AS `c` ON e.entity_id = c.product_id

私のコレクションでこれを行うと、adminhtml グリッドがクラッシュします。ここでクラッシュするレポートをトレースします。

a:5:{i:0;s:35:"Unrecognized method 'setPageSize()'";i:1;s:4771:"#0 /app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(504): Zend_Db_Select->__call('setPageSize', Array)

4

1 に答える 1

1

Zend_Db_Selectによって返されるオブジェクトには、任意のメソッドを適用できますgetSelect()

http://framework.zend.com/manual/1.12/en/zend.db.select.html

COUNT()メソッドで使用できますjoin()。ページにはいくつかの例があります。特に、「GROUP BY 句の追加」セクションの最初の例を参照してください。

->join(array('l' => 'line_items'),
    'p.product_id = l.product_id',
    array('line_items_per_product' => 'COUNT(*)'))
于 2013-04-25T11:12:58.963 に答える