Magento - 如何在EE 1.9中使用JoinTable函数

Wil*_*lem 5 php mysql magento

升级到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')); 
Run Code Online (Sandbox Code Playgroud)

但升级后我们收到错误消息:致命错误:调用未定义的方法Mage_Sales_Model_Mysql4_Order_Collection :: joinTable().

有谁知道该怎么办?

And*_*kus 3

订单集合现在由一个平面表表示。因此,您可以通过此集合的标准 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');
Run Code Online (Sandbox Code Playgroud)

这是这个问题的答案。

但是,另外我应该指出代码片段中的一些问题,您在问题中给出了:

  1. 最好为您的商店覆盖此集合,并将此逻辑放入新创建的集合模型的公共方法中。它比直接操作集合的字段要好。
  2. 从来不允许连接标识符“right”用于连接 EAV 集合表。在内部,作为未知标识符,它被映射到“内部连接”。它与可能预期的“右外连接”非常不同。你应该重写逻辑吗?或者“内部联接”是否按预期发挥作用?
  3. “sku”、“qty_ordered”、“qty_invoiced”字段不明确。它们不可靠,因为它们取自未知的订单商品(甚至来自不同的商品),并通过“udropship”条件加入到订单中。
  4. 如果它是一个字符串,您可能应该引用 '$this->vendorid'。或者如果它是整数,则将其转换为 int。仅将供应商 ID 连接到字符串并用双引号引起来是不安全的。