Perilaku getTable Magento 2

13

TL; DR: Apakah ada cara di Magento 2 untuk membuat metode getTabledari model pengumpulan sumber daya untuk mengembalikan nama tabel yang sama untuk 2 parameter yang berbeda?

Penjelasan Rinci
Saya akan mulai dengan contoh dari Magento 1.
Katakanlah saya memiliki tabel yang disebut module_entiti1_entity2.
Saya perlu mendeklarasikan tabel ini dalam bentuk config.xmlseperti ini

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

Maka saya bisa mendapatkan nama tabel dari model pengumpulan sumber daya misalnya seperti ini:

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

Tetapi jika saya mau, saya bisa menggunakan banyak alias untuk tabel yang sama.
Jika config.xmlbagian saya menjadi

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

Saya dapat mengambil meja saya dengan 2 cara:

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

Di Magento 2 tidak ada lagi deklarasi tabel seperti di atas.
Saya bisa mendapatkan nama tabel saya seperti ini $collection->getTable('module_entity1_entity2').
Apakah ada cara untuk memberitahu magento bahwa untuk parameter module_entity2_entity1untuk mengembalikan nama tabel yang sama dengan parameter module_entity1_entity2?

Marius
sumber

Jawaban:

3

Yang Anda cari adalah setMappedTableName. Sebut ini di dalam model sumber daya Anda:

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

Anda dapat menempatkan ini di dalam fungsi lalu memanggilnya sebelum memanggil getTablemetode.

Pada dasarnya, dikatakan bahwa setiap kali saya meminta module_entity1_entity1, berikan saya module_entity1_entity2meja.

Vernard Luz
sumber
Terima kasih atas sarannya, saya akan mencobanya dan kembali dengan hasilnya. Dengan rekomendasi Anda, Jika saya menggunakan setMappedTableNamekonstruktor model sumber daya saya itu harus berfungsi, kan? Yang dipanggil sebelum metode lain dari kelas.
Marius
Benar, saya pikir itu adalah tempat terbaik yang dapat Anda tempatkan sehingga dipetakan secara permanen. Kecuali jika Anda ingin itu berfungsi dalam kasus tertentu saja.
Vernard Luz
Hei. Berhasil. Akan lebih baik jika saya bisa melakukan ini melalui di.xml. Jika tidak memungkinkan saya akan menerapkan mekanisme saya sendiri. Tapi ini yang saya butuhkan untuk memulai. Terima kasih.
Marius
Sama-sama, saya penggemar BTW. Dengan senang hati saya bisa membantu Anda.
Vernard Luz