Magento 2 getTable พฤติกรรม


13

TL; DR:มีวิธีใดใน Magento 2 ที่จะสร้างวิธีการgetTableจากแบบจำลองการรวบรวมทรัพยากรเพื่อส่งคืนชื่อตารางเดียวกันสำหรับพารามิเตอร์ที่แตกต่างกัน 2 ตัว?

คำอธิบายรายละเอียด
ฉันจะเริ่มต้นด้วยตัวอย่างจากวีโอไอพี 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 ไม่มีการประกาศตารางเพิ่มเติมอีก ฉันจะได้รับชื่อตารางของฉันเช่นนี้
มีวิธีบอก magento หรือไม่ว่าพารามิเตอร์จะส่งคืนชื่อตารางเดียวกันกับพารามิเตอร์หรือไม่$collection->getTable('module_entity1_entity2')
module_entity2_entity1module_entity1_entity2

คำตอบ:


3

setMappedTableNameสิ่งที่คุณกำลังมองหาอยู่ เรียกสิ่งนี้ในโมเดลทรัพยากรของคุณ:

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

คุณสามารถวางสิ่งนี้ไว้ในฟังก์ชั่นแล้วเรียกสิ่งนั้นก่อนที่จะเรียกgetTableวิธี

โดยพื้นฐานแล้วมันบอกว่าทุกครั้งที่ฉันขอmodule_entity1_entity1ให้module_entity1_entity2โต๊ะกับฉัน


ขอบคุณสำหรับคำแนะนำฉันจะลองและกลับมาพร้อมผลลัพธ์ ตามคำแนะนำของคุณถ้าฉันใช้ตัวsetMappedTableNameสร้างโมเดลทรัพยากรของฉันมันควรจะใช้ได้ใช่ไหม สิ่งนั้นถูกเรียกก่อนวิธีอื่นใดจากชั้นเรียน
Marius

จริงฉันคิดว่านั่นเป็นสถานที่ที่ดีที่สุดที่คุณสามารถวางไว้เพื่อแมปอย่างถาวร ถ้าคุณไม่ต้องการให้มันทำงานในบางกรณีเท่านั้น
Vernard Luz

เฮ้ มันได้ผล. di.xmlมันจะดีถ้าผมสามารถทำเช่นนี้ผ่านทาง หากเป็นไปไม่ได้ฉันจะใช้กลไกของตัวเอง แต่นี่คือสิ่งที่ฉันต้องการเพื่อเริ่มต้น ขอขอบคุณ.
Marius

คุณยินดีฉันเป็นแฟน BTW ฉันยินดีที่ได้ช่วยเหลือคุณ
Vernard Luz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.