2012-12-18 49 views
1

我有一個自定義表starmall_config_shop,列idnameMagento 1.7 collection and joinField

我將自定義屬性shop_id添加到產品表中。

我想要得到的namestarmall_config_shop

當我做

$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') - - >不工作

+0

一眼看上去,你的代碼對我來說似乎可以,你正在清理試圖加入shop_id屬性,但它不在你的sql中。如果有的話,我猜你已經啓用了平面目錄並需要重新索引,或者緩存清除。 –

+0

剛剛檢查,但在配置平面目錄中未啓用。對於開發,我禁用了緩存。確定刪除了緩存文件夾,但查​​詢仍然失敗。是的,它不是在SQL中,我猜我需要找出如何將自定義產品屬性「shop_id」加入到查詢中。 – Guus

+0

可能是一個愚蠢的問題,但你確定你刪除了正確的緩存目錄。我在使用Magento時遇到的第一個問題是我忘記將var目錄設置爲可寫,並在/ tmp /中創建緩存。 –

回答

0

在SYSTEM.LOG我看到:

Recoverable Error: Object of class Mage_Catalog_Model_Resource_Product_Collection could not be converted to string

我搜查,發現有第二個參數:

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) 

但我仍然不知道爲什麼?

0

問題是

'id=shop_id'. 

嘗試使用

"entity_id=shop_id" 

如果shop_id是來自表at_shop_name的字段。

+0

我認爲'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'是'PK' starmall_config_shop'表。 – Guus