Làm thế nào để tải dữ liệu mô hình tham gia 2 bảng?


9

Giả sử tôi có một đơn giản Model A rằng mục tiêu bảng A bây giờ tôi có thêm một số thông tin thêm vì vậy tôi quyết định tạo một Model B và lưu những thông tin phụ trong một Bảng B với một trỏ chính nước ngoài để Bảng A chìa khóa chỉ mục.

Thông thường Joins được thực hiện trong các bộ sưu tập nhưng nếu tôi tải một mô hình thì bộ sưu tập không được gọi, thay vào đó chỉ resource modelsử dụng mô hình.

Làm cách nào tôi có thể sửa đổi Mô hình A để tải dữ liệu từ Bảng B trên load()?


Câu hỏi hay ... Tôi thích nó
Amit Bera

Đó là một loại triển khai đơn giản của EAV ... Tôi đã tìm thấy một loại giải pháp nhưng tôi đang chờ đợi cách tiếp cận khác và thử nghiệm nó, trước khi đăng nó
Fra

Câu trả lời:


11

Bên trong lớp mô hình tài nguyên thêm chức năng sau

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

Khi bạn gọi Mage::getModel('modulename/TableA')->load(1), phương thức này sẽ tham gia với table_b.


Tôi nghĩ limit(1)là không bắt buộc: joinLeft()sẽ là đủ ...
Fra

Tôi chỉ làm một ví dụ cho điều đó. Bạn có thể thay đổi điều này theo yêu cầu của bạn.
Sohel Rana

6

Tôi có thể đề xuất cho bạn cách tiếp cận mà tôi sử dụng, và nó khá dễ dàng.

Các bước:

  1. Viết lại mô hình tài nguyên của Mô hình A (Nếu Mô hình A là mô hình của bạn chứ không phải Magento thì bạn có thể bỏ qua bước này)

  2. Phương thức viết lại _getLoadSelect () của mô hình tài nguyên của Mô hình A. Chọn truy vấn được tạo trong phương thức này và tại đây bạn có thể tham gia các bảng khác.


Bạn đánh bại tôi vào nó. +1
Marius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.