Magento 2 comportamento getTable


13

TL; DR: Esiste un modo in Magento 2 per rendere il metodo getTableda un modello di raccolta di risorse per restituire lo stesso nome di tabella per 2 parametri diversi?

Spiegazione dettagliata Inizierò
con un esempio di Magento 1.
Diciamo che ho una tabella chiamata module_entiti1_entity2.
Avevo bisogno di dichiarare questa tabella nella mia in config.xmlquesto modo

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

Quindi posso ottenere il nome della tabella da un modello di raccolta risorse, ad esempio in questo modo:

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

Ma se voglio posso usare più alias per la stessa tabella.
Se la mia config.xmlsezione diventa

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

Posso recuperare il mio tavolo in 2 modi:

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

In Magento 2 non esiste più una dichiarazione di tabella come sopra.
Posso ottenere il nome del mio tavolo in questo modo $collection->getTable('module_entity1_entity2').
C'è un modo per dire a Magento che per il parametro module_entity2_entity1restituisce lo stesso nome di tabella del parametro module_entity1_entity2?

Risposte:


3

Quello che stai cercando è setMappedTableName. Chiamalo nel tuo modello di risorsa:

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

Puoi inserirlo all'interno di una funzione, quindi chiamarlo prima di chiamare il getTablemetodo.

Fondamentalmente, dice che ogni volta che chiedo module_entity1_entity1, dammi il module_entity1_entity2tavolo.


Grazie per il suggerimento, lo proverò e tornerò con i risultati. Con i tuoi consigli, se uso il setMappedTableNamecostruttore nel mio modello di risorsa dovrebbe funzionare, giusto? Quello viene chiamato prima di qualsiasi altro metodo della classe.
Marius

È vero, penso che sia il posto migliore in cui puoi metterlo in modo che sia mappato in modo permanente. A meno che tu non voglia che funzioni solo in casi specifici.
Vernard Luz,

Hey. Funziona. Sarebbe bello se posso farlo tramite di.xml. Se non è possibile implementerò il mio meccanismo. Ma questo è ciò di cui avevo bisogno per iniziare. Grazie.
Marius

Prego, sono un fan BTW. È un piacere aiutarti.
Vernard Luz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.