【问题标题】:Magento 1.7 collection and joinFieldMagento 1.7 收集和加入字段
【发布时间】:2015-01-27 09:42:51
【问题描述】:

我有一个自定义表 starmall_config_shop,其中包含 idname 列。

我在产品表中添加了自定义属性shop_id

我想从starmall_config_shop得到name

当我这样做时

$rs = Mage::getModel('catalog/product')
                ->getCollection()
                ->addAttributeToSelect('shop_id');

$rs->joinField('shop_name','starmall_config/shop','name','id=shop_id'
    ,NULL,'left');

我得到了错误

Unknown column 'at_shop_id.value' in 'on clause'

$rs->printlogquery(true) 给出:

SELECT `e`.*, `at_shop_name`.`name` AS `shop_name` FROM `catalog_product_entity` AS `e`
 LEFT JOIN `starmall_config_shop` AS `at_shop_name` ON (at_shop_name.`id`=at_shop_id.value)

我发现我可能缺少对属性表的连接。

at_shop_id.value 来自哪里? 如何获取查询中的name 列?

====================

目前的工作解决方案是使用:

->addAttributeToSelect('shop_id', 'left') ---> 有效

->addAttributeToSelect('shop_id') ---> 不起作用

【问题讨论】:

  • 乍一看,您的代码对我来说似乎没问题,您正在清除尝试加入 shop_id 属性,但它不在您的 sql 中。如果有什么我猜你启用了平面目录并需要重新索引,或者你的缓存清除。
  • 刚刚检查过,但未启用配置平面目录。为了开发,我禁用了缓存。确保删除缓存文件夹,但查​​询仍然失败。是的,它不在 sql 中,我想我需要找出如何将自定义产品属性 shop_id 放入查询中。
  • 可能是一个愚蠢的问题,但你确定你删除了正确的缓存目录。使用 Magento 时我的第一个问题是我忘记让 var 目录可写,它会在 /tmp/ 中创建缓存。
  • 检查我删除了完整的 /var 文件夹。它是自动重新创建的,其中包含子文件夹和文件。

标签: magento magento-1.7


【解决方案1】:

问题是

'id=shop_id'. 

尝试使用

"entity_id=shop_id" 

如果 shop_id 是表 at_shop_name 中的一个字段。

【讨论】:

  • 我认为id=shop_id 的左侧是正确的,因为生成的连接是LEFT JOIN starmall_config_shop AS at_shop_name ON (at_shop_name.id=at_shop_id.value),其中at_shop_name.id 是来自starmall_config_shop 表的PK
【解决方案2】:

在 system.log 我看到:

可恢复的错误:Mage_Catalog_Model_Resource_Product_Collection 类的对象无法转换为字符串

我搜了一下,发现还有第二个参数:

addAttributeToSelect($attribute, $joinType=false)

当我现在使用时它可以工作:

addAttributeToSelect('shop_id', 'left');

然后生成的查询是:

SELECT e.*, at_shop_id.value AS shop_id, at_shop_name.name AS shop_name
FROM catalog_product_entity AS e
LEFT JOIN catalog_product_entity_int 
    AS at_shop_id 
   ON (at_shop_id.entity_id = e.entity_id) 
  AND (at_shop_id.attribute_id = 973) 
  AND (at_shop_id.store_id = 0)
LEFT JOIN starmall_config_shop 
    AS at_shop_name 
   ON (at_shop_name.id=at_shop_id.value)

但我还是不知道为什么??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多