【问题标题】:Magento bundled items filter by parent idMagento 捆绑项目按父 ID 过滤
【发布时间】:2012-01-19 11:58:14
【问题描述】:

我正在尝试获取一系列选择,但已根据父产品的 ID 进行过滤。该集合包含一个属性parent_product_id,但显然这不起作用......过滤器没有被考虑在内。

这是我目前所拥有的:

$children = Mage::getResourceModel('bundle/selection_collection')
    ->addAttributeToSelect(array('product_id', 'selection_price_value'))
    ->setStoreId(Mage::app()->getStore()->getId())
    ->addAttributeToFilter('parent_product_id',$item->getProductId());

它返回所有选择的集合,因此没有过滤器。有没有办法只选择一种特定的捆绑产品?请注意,我使用这种方法是有原因的……它应该只基于父 id。

【问题讨论】:

  • 看起来你还没有得到答案?
  • 还没有......虽然“黑客”可能会奏效,但我仍然希望有一个优雅的解决方案。

标签: magento collections bundle product


【解决方案1】:

我建议检查集合是如何构造查询的:

$sql = Mage::getResourceModel('bundle/selection_collection')->getSelect()->__toString(); 
Mage::log($sql);`

检查您的过滤器是否真的存在(在 WHERE 子句中)并针对您的数据库运行提取的 SQL 查询(如果您有 shell 访问权限,则在 PhpMyAdmin 或 mysql-client 中)。您应该看到问题的根源。

您也可以尝试 dirty 方法,并弄乱集合的 Zend_Select 对象:

$collection = Mage::getResourceModel('bundle/selection_collection')
    ->addAttributeToSelect(array('product_id', 'selection_price_value'))
    ->setStoreId(Mage::app()->getStore()->getId());
$collection->getSelect()->where('`selection`.`parent_product_id` = '.$item->getProductId());

【讨论】:

  • 是的,我知道我可以使用它,但我真的更喜欢以正确的 Magento 方式做事......当 magento 失败时,这更像是一种 hack,但在我看来,这是一个常规属性 -过滤器必须工作。查询字符串当然已经过测试,永远不会添加 parent_product_id 的 where 子句。
  • 如果您使用 EAV 模型,或者使用连接,这真的只是一个 hack。在平面表上使用 ->where() 可能是过滤平面集合的最佳方式。
【解决方案2】:

尝试以下方法:

->addAttributeToSelect('*') //select all possible fields    
->addFieldToFilter('parent_product_id',array('eq' => $item->getProductId()));

有些字段是属性,有些只是该表中的字段。

查看此文件以获取一些示例: /app/code/core/Mage/Bundle/Model/Product/Type.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多