2

私はインターンで、Magento を初めて使用します。コツをつかみ始めたような気がしますが、MySQL が私の最強のスキルセットではないことに加えて、データベース アクセス機能はまだ私にとってあまり直感的ではありません。

現在、バックエンドで、テーブル 'eav_attribute' の 'frontend_label' と 'eav_attribute_option_value' の 'value' を含む行を持つカスタム テーブルを表示するモジュールを作成しています。私のテーブル自体には、attribute_id と option_id への外部キー参照があり、列をテーブルに結合するための手段です。

属性が単一のストアに保存されている場合、クエリは正常に機能します。問題は、「eav_attribute_option_value」が各 store_id に対して重複する属性/オプションのペアを持っていることです。つまり、ストア エントリが複数あると、テーブルに各属性オプション ペアのエントリが重複して表示されます (各属性オプション ペアを 1 回だけ表示する必要があります)。以下のクエリが属性オプションのペアに対して一意のエントリのみを返すように、クエリに制約を追加したいと思います (実際には、属性/オプションのペアが「eav_attribute_option_value」で重複しているという事実を無視します。 store_id)。私の質問は以下のとおりですが、私は現在立ち往生しているので、誰かが私を正しい方向に向けることができることを望んでいました.

みんな、ありがとう!

    protected function _prepareCollection()
{
    $collection = Mage::getModel('landing/management')->getCollection();
    $collection->getSelect()
        ->join(array('eavattr' => 'eav_attribute'),'eavattr.attribute_id = main_table.attribute_id')
        ->join(array('opt'=>'eav_attribute_option_value'),'opt.option_id = main_table.option_id')
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns(array('*'))
        ->columns(array('frontend_label'),'eavattr')
        ->columns(array('value'),'opt');
    $this->setCollection($collection);

    return parent::_prepareCollection();
}
4

1 に答える 1

2

この場合、エントリの重複を避けるために、「frontend_label」と「value」でグループ化できます。私の場合、コードは次のようになりました。

        $collection->getSelect()
        ->join(array('eavattr' => 'eav_attribute'),'eavattr.attribute_id = main_table.attribute_id')
        ->join(array('opt'=>'eav_attribute_option_value'),'opt.option_id = main_table.option_id')
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns(array('*'))
        ->columns(array('frontend_label'),'eavattr')
        ->columns(array('value'),'opt')
        ->group('frontend_label','value');
于 2013-01-29T17:37:32.150 に答える