Magento 2 getTableの動作


13

TL; DR: Magento 2にgetTableは、リソースコレクションモデルからメソッドを作成して、2つの異なるパラメーターに対して同じテーブル名を返す方法はありますか?

詳細な説明
Magento 1の例から始め
ますmodule_entiti1_entity2
このconfig.xmlようなテーブルをこのように宣言する必要がありました

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

次に、たとえば次のようなリソースコレクションモデルからテーブル名を取得できます。

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

しかし、必要であれば、同じテーブルに複数のエイリアスを使用できます。
私のconfig.xmlセクションが

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

2つの方法でテーブルを取得できます。

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

Magento 2では、上記のようなテーブル宣言はもうありません。
このようにテーブル名を取得できます$collection->getTable('module_entity1_entity2')
パラメーターがパラメーターmodule_entity2_entity1と同じテーブル名を返すようにmagentoに指示する方法はありますmodule_entity1_entity2か?

回答:


3

あなたが探していることですsetMappedTableName。リソースモデル内でこれを呼び出します。

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

これを関数内に配置し、getTableメソッドを呼び出す前に呼び出すことができます。

基本的に、を求めるたびにテーブルmodule_entity1_entity1を教えてくれmodule_entity1_entity2ます。


提案をありがとう、私はそれを試して結果を返します。あなたの推奨によりsetMappedTableName、私がリソースモデルコンストラクタでを使用すれば、動作するはずですよね?それはクラスの他のメソッドの前に呼び出されます。
マリウス

確かに、それはあなたがそれを置くことができる最高の場所だと思うので、それは永久にマッピングされます。特定の場合にのみ機能させたい場合を除きます。
ヴァーナードルス

やあ できます。を介してこれを行うことができればいいと思いますdi.xml。それが不可能な場合は、独自のメカニズムを実装します。しかし、これは私が始めるために必要なものです。ありがとうございました。
マリウス

どういたしまして、私はファンです。あなたの助けになることは私の喜びです。
ヴァーナードルス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.