Magento 2 hành vi getTable


13

TL; DR: Có cách nào trong Magento 2 để tạo phương thức getTabletừ mô hình thu thập tài nguyên để trả về cùng tên bảng cho 2 tham số khác nhau không?

Giải thích chi tiết
Tôi sẽ bắt đầu với một ví dụ từ Magento 1.
Giả sử tôi có một bảng được gọi module_entiti1_entity2.
Tôi cần phải khai báo bảng config.xmlnày như thế này

<module_resource>
    <class>....</class>
    <entities>
         <entity1_entity2>
             <table>module_entiti1_entity2</table>
         </entity1_entity2>
    </entities>
</module_resource>

Sau đó, tôi có thể lấy tên bảng từ một mô hình thu thập tài nguyên, ví dụ như thế này:

$collection->getTable('module/entity1_entity2');

Nhưng nếu tôi muốn tôi có thể sử dụng nhiều bí danh cho cùng một bảng.
Nếu config.xmlphần của tôi trở thành

<module_resource>
    <class>....</class>
    <entities>
         <entity1_entity2>
             <table>module_entiti1_entity2</table>
         </entity1_entity2>
         <entity2_entity1>
             <table>module_entiti1_entity2</table>
         </entity2_entity1>
    </entities>
</module_resource>

Tôi có thể truy xuất bảng của mình theo 2 cách:

$collection->getTable('module/entity1_entity2');
$collection->getTable('module/entity2_entity1');

Trong Magento 2 không có khai báo bảng như trên.
Tôi có thể lấy tên bảng của tôi như thế này $collection->getTable('module_entity1_entity2').
Có cách nào để nói với magento rằng tham số module_entity2_entity1trả về cùng tên bảng với tham số module_entity1_entity2không?

Câu trả lời:


3

Những gì bạn đang tìm kiếm là setMappedTableName. Gọi cái này trong mô hình tài nguyên của bạn:

$this->_resources->setMappedTableName('module_entity1_entity1', 'module_entity1_entity2');

Bạn có thể đặt cái này bên trong một hàm rồi gọi nó trước khi gọi getTablephương thức.

Về cơ bản, nó nói rằng bất cứ khi nào tôi yêu cầu module_entity1_entity1, đưa cho tôi module_entity1_entity2bàn.


Cảm ơn lời đề nghị, tôi sẽ thử nó và quay lại với kết quả. Theo khuyến nghị của bạn, nếu tôi sử dụng setMappedTableNametrình xây dựng mô hình tài nguyên của mình thì nó sẽ hoạt động, phải không? Cái đó được gọi trước bất kỳ phương thức nào khác từ lớp.
Marius

Đúng, tôi nghĩ đó là nơi tốt nhất bạn có thể đặt nó để nó được lập bản đồ vĩnh viễn. Trừ khi bạn muốn nó chỉ hoạt động trong các trường hợp cụ thể.
Vernard Luz

Chào. Nó hoạt động. Sẽ thật tuyệt nếu tôi có thể làm điều này thông qua di.xml. Nếu không thể, tôi sẽ thực hiện cơ chế của riêng mình. Nhưng đây là những gì tôi cần để bắt đầu. Cảm ơn bạn.
Marius

Bạn được chào đón, tôi là một fan hâm mộ BTW. Đó là niềm vui của tôi để được giúp đỡ cho bạn.
Vernard Luz
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.