2つのテーブルを結合するモデルデータをロードする方法


9

テーブルAをターゲットとする単純なモデルAがあるとします。ここで、追加情報を追加する必要があるため、モデルBを作成し、テーブルAのインデックスキーを指す外部キーを使用してそれらの追加情報をテーブルBに保存します。

通常、結合はコレクションで行われますが、モデルをロードした場合、コレクションは呼び出されず、代わりにのみresource modelが使用されます。

モデルAを変更して、表Bのデータもロードする方法を教えてload()ください。


良い質問...私はそれが好きです
アミットベラ

これは一種のEAVの単純な実装です...一種の解決策を見つけましたが、投稿する前に他のアプローチを待ってテストしています
Fra

回答:


11

リソースモデルクラス内に次の関数を追加します

protected function _getLoadSelect($field, $value, $object)
{
    $select = parent::_getLoadSelect($field, $value, $object);

    $select->joinLeft(
        array('t_b' => 'table_b'),
        $this->getMainTable() . '.id = t_b.id',
        array('columnA'));
    return $select;
}

を呼び出すとMage::getModel('modulename/TableA')->load(1)、このメソッドはtable_bと結合します。


limit(1)は必要ではないと思います:joinLeft()十分でしょう...
Fra

私はその例を設定しただけです。これは、必要に応じて変更できます。
Sohel Rana 14

6

私が使っているアプローチを提案できます。とても簡単です。

手順:

  1. モデルAのリソースモデルを書き換えます(モデルAがあなたのモデルであり、Magentoではない場合は、この手順をスキップできます)

  2. モデルAのリソースモデルのメソッド_getLoadSelect()を書き換えます。選択クエリがこのメソッドで生成され、ここで他のテーブルを結合できます。


あなたは私をそれに打ち負かしました。+1
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.