Magento 2的getTable行为


13

TL; DR: Magento 2中有什么方法可以使getTable资源收集模型中的方法返回两个不同参数的相同表名?

详细说明
我将从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>

我可以通过两种方式检索表:

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

在Magento 2中,不再像上面那样声明表。
我可以这样获得表名$collection->getTable('module_entity1_entity2')
有没有办法告诉magento,该参数module_entity2_entity1返回与该参数相同的表名module_entity1_entity2

Answers:


3

您正在寻找的是setMappedTableName。在资源模型中调用此方法:

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

您可以将其放在函数中,然后在调用getTable方法之前先对其进行调用。

基本上,它说每当我要求时module_entity1_entity1,给我module_entity1_entity2桌子。


感谢您的建议,我将尝试一下并返回结果。根据您的建议,如果我setMappedTableName在资源模型构造函数中使用,它应该起作用,对吗?该类会比该类的其他任何方法先调用。
Marius

是的,我认为这是放置它的最佳位置,因此可以永久映射。除非您只希望它在特定情况下起作用。
Vernard Luz 2015年

嘿。有用。如果可以通过这样做会很好di.xml。如果不可能,我将实现自己的机制。但这就是我开始所需要的。谢谢。
Marius

不客气,我是BTW的粉丝。我很高兴能为您提供帮助。
Vernard Luz 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.