Bagaimana cara Muat data Model bergabung dengan 2 tabel?

9

Misalkan saya memiliki Model A sederhana yang menargetkan tabel A sekarang saya harus menambahkan beberapa info tambahan jadi saya memutuskan untuk membuat Model B dan menyimpan info tambahan itu dalam Tabel B dengan kunci asing yang menunjuk ke Tabel A kunci indeks.

Biasanya Bergabung dilakukan dalam koleksi tetapi jika saya memuat model koleksi tidak dipanggil, melainkan hanya resource modeldigunakan.

Bagaimana cara merubah Model A untuk memuat juga data dari Tabel B di load()?

Fra
sumber
Pertanyaan Bagus ... Saya menyukainya
Amit Bera
Ini adalah semacam implementasi sederhana EAV ... Saya menemukan semacam solusi tapi saya menunggu pendekatan lain dan mengujinya, sebelum mempostingnya
Fra

Jawaban:

11

Kelas model sumber daya dalam menambahkan fungsi berikut

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

Ketika Anda menelepon Mage::getModel('modulename/TableA')->load(1), metode ini akan bergabung dengan table_b.

Sohel Rana
sumber
Saya pikir limit(1)tidak diperlukan: joinLeft()akan cukup ...
Fra
Saya baru saja memberi contoh untuk itu. Anda dapat mengubah ini sesuai dengan kebutuhan Anda.
Sohel Rana
6

Saya dapat mengusulkan Anda pendekatan yang saya gunakan, dan itu cukup mudah.

Langkah:

  1. Tulis ulang model sumber daya Model A (Jika Model A adalah model Anda dan bukan Magento maka Anda dapat melewati langkah ini)

  2. Metode penulisan ulang _getLoadSelect () model sumber daya Model A. Kueri pemilihan dihasilkan dalam metode ini dan di sini Anda dapat bergabung dengan tabel lainnya.

oleksii.svarychevskyi
sumber
Anda mengalahkan saya untuk itu. +1
Marius