magento 升级到 1.9.1 EE 后出现问题。在自定义脚本中,我们过去常常通过这种方式与另一个表进行连接,并且它始终运行良好。
$collection->joinTable('sales_flat_order_item','order_id=entity_id', array('sku', 'qty_ordered', 'qty_invoiced', 'udropship_vendor') , 'sales_flat_order_item.udropship_vendor="'.$this->vendorid.'"', 'right');
$collection->groupByAttribute(array('entity_id'));
但升级后我们收到错误消息: fatal error :调用未定义的方法 Mage_Sales_Model_Mysql4_Order_Collection::joinTable()。
有人知道怎么办吗?
最佳答案
Order Collection 现在由一个平面表表示。因此,您可以通过此集合的标准 Varien_Db_Select 属性添加过滤器:
$select = $collection->getSelect();
$select->join(
array('o_item' => 'sales_flat_order_item'),
'o_item.order_id = main_table.entity_id AND o_item.udropship_vendor = "' . $this->vendorid . '"',
array('sku', 'qty_ordered', 'qty_invoiced', 'udropship_vendor')
)
->group('main_table.entity_id');
就是这个问题的答案。
但是,另外我应该指出代码片段中的一些问题,您在问题中给出了:
- 最好覆盖这个 为您的商店收集和 将此逻辑放入新创建的 public 集合模型的方法。它比操纵集合的字段更好 直接。
- 连接标识符“right”是 不允许加入 EAV 收集表。在内部,作为未知标识符,它被映射 到“内部加入”。这个很 与可能的预期不同 '右外连接'。你应该 重写逻辑?还是“内部加入” 按预期行事?
- 'sku', 'qty_ordered', “qty_invoiced”字段不明确。 他们并不像现在这样可靠 取自未知的订单项目(或 甚至来自不同的项目),那是 通过“udropship”加入订单 条件。
- 有可能,你应该引用 '$this->vendorid',如果它是一个字符串。 或者将它转换为 int,如果它是整数。 仅将供应商 ID 连接到 字符串并用双 引述。
关于php - Magento - 如何在 EE 1.9 中使用 JoinTable 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519439/