Domanda

Situazione ipotetica. Voglio popolare / caricare una raccolta sales / order con ogni ordine in cui grand_total è uguale a total_paid . So di poter utilizzare addFieldToFilter per filtrare in base a un valore specifico, ma è possibile utilizzare questo metodo per filtrare in base ad altri valori del database. In caso contrario, esiste un oggetto di accesso ai dati nel sistema Magento che lo consente.

$orders = Mage::getModel('sales/order');
$orders = $orders->getCollection();
$orders->addFieldToFilter('total_paid',Array('eq'=>30));  //would find all the orders that were 30 
//syntax to find all the orders whose total_paid value is equal to it's grand_total attribute
//????????

Il concetto SQL non-eav che sto cercando è:

SELECT * FROM Orders o WHERE o.total_paid = o.grand_total

È possibile eseguire esclusivamente chiamate al metodo degli oggetti o devo eseguire il filtro post-caricamento?

Come gestiscono gli altri sistemi ORM ?

È stato utile?

Soluzione

Stavo aspettando una risposta definitiva a questo, ma visto che non è successo nulla potrei anche condividere ciò che ho scoperto. Ho tracciato addFieldToFilter e apparentemente ogni valore che usi finisce tra virgolette, quindi non puoi davvero "quotare" questo usando il nome di una colonna. In realtà non vedo alcun modo per farlo, almeno non all'interno di questa classe.

Realisticamente penso che dovrai andare con il filtro post-caricamento, almeno per ora. Questa ovviamente è la definizione stessa di codice inefficiente, ma poi di nuovo se l'efficienza computazionale fosse una priorità, non useresti Magento in primo luogo ...

Altri suggerimenti

Ho dovuto solo affrontarlo in uno dei miei progetti e ho trovato questa domanda mentre cercavo una risoluzione migliore. Il mio hack è simile al seguente:

$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
       ->where('total_paid=grand_total');

Mi dà fastidio che una tale funzionalità di base dei database sia trascurata dall'ORM di Magento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top