Как загрузить данные модели, объединяющие 2 таблицы?


9

Предположим, у меня есть простая Модель A , предназначенная для таблицы A, теперь мне нужно добавить дополнительную информацию, поэтому я решил создать Модель B и сохранить эту дополнительную информацию в Таблице B с внешним ключом, указывающим на ключ индекса таблицы A.

Обычно объединения выполняются в коллекциях, но если я загружаю модель, коллекция не вызывается, а 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()хватит ...
Фра

Я просто подал пример для этого. Вы можете изменить это в соответствии с вашими требованиями.
Сохель Рана

6

Я могу предложить вам подход, который я использую, и это довольно легко.

шаги:

  1. Перепишите модель ресурсов модели A (если модель A является вашей моделью, а не Magento, то вы можете пропустить этот шаг)

  2. Перепишите метод _getLoadSelect () модели ресурсов модели А. В этом методе создается запрос выбора, и здесь вы можете присоединиться к другим таблицам.


Ты подтолкнул меня на это. +1
Мариус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.