Como carregar dados do modelo juntando 2 tabelas?

9

Suponha que eu tenha um Modelo A simples que a tabela de destino A agora eu precise adicionar algumas informações extras para que eu decida criar um Modelo B e salve essas informações extras em uma Tabela B com uma chave estrangeira apontando para a chave de índice da Tabela A.

Normalmente, as junções são feitas em coleções, mas se eu carregar um modelo, a coleção não é chamada, apenas o resource modelé usado.

Como posso modificar Modelo A para carregar também os dados do Quadro B em load()?

Fra
fonte
Boa pergunta ... eu gosto
Amit Bera
É um tipo de implementação simples de EAV ... Encontrei um tipo de solução, mas estou aguardando outra abordagem e testá-la antes de publicá-la.
Fra

Respostas:

11

A classe de modelo de recurso interno inclui a seguinte função

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;
}

Quando você ligou Mage::getModel('modulename/TableA')->load(1), esse método se juntará ao table_b.

Sohel Rana
fonte
Eu acho que limit(1)não é necessário: joinLeft()será o suficiente ...
Fra
Acabei de dar um exemplo para isso. Você pode alterar isso de acordo com sua exigência.
Sohel Rana
6

Posso propor-lhe a abordagem que uso, e é bastante fácil.

Passos:

  1. Reescreva o modelo de recursos do Modelo A (se o Modelo A for seu modelo e não o Magento, você poderá pular esta etapa)

  2. Reescreva o método _getLoadSelect () do gabarito de recurso do Modelo A. A consulta de seleção é gerada nesse método e aqui você pode ingressar nas outras tabelas.

oleksii.svarychevskyi
fonte
Você chegou antes de mim. +1
Marius