1

starmall_config_shopidと。を含むカスタムテーブルがありますname

shop_id製品テーブルにカスタム属性を追加しました。

nameから取得したいstarmall_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') --->動作しません

4

2 に答える 2

0

問題は

'id=shop_id'. 

使ってみて

"entity_id=shop_id" 

shop_id の場合、テーブル at_shop_name のフィールドです。

于 2012-12-18T14:19:15.807 に答える
0

system.log には次のように表示されます。

回復可能なエラー: クラス Mage_Catalog_Model_Resource_Product_Collection のオブジェクトを文字列に変換できませんでした

検索したところ、2 番目のパラメーターがあることがわかりました。

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)

でもなんでかはまだわからないですよね??

于 2012-12-18T21:37:28.547 に答える