Sono un grande fan del modo in cui Magento ha astratto i livelli del database in più livelli e relazioni con i modelli di raccolta.
Questo potrebbe non rispondere direttamente alla domanda, ma potrebbe aprire la porta a pensare un po 'diversamente agli oggetti base dati.
Il modo in cui chiameresti un singolo cliente è qualcosa come:
$customer = Mage::getModel('customer')->load('20');
Dove il metodo getModel istanzia una classe caricata magicamente da un file di definizione XML. In questo caso, diciamo che è chiamato Mage_Core_Model_Customer
.
Il tuo modello base si estende quasi sempre da una classe genitore che gestisce l'astrazione del database e quella classe si estende da una classe di oggetti generica che imposta getter e setter magici per tutte le classi del modello. Quindi, se qualcosa si estende dall'astrazione del database, riprende anche i metodi getter e setter.
Nel fare load('20')
stai specificando che vorresti caricare l'oggetto del database con la chiave id
che è 20
.
Ora specificamente sulla tua domanda. Magento usa anche la mappatura relazionale tra ogni entità e il loro oggetto seme. Ad esempio un cliente può avere molti indirizzi. Il loro indirizzo non viene restituito in modo naturale come parte dell'oggetto, tuttavia se si desidera ottenere un attributo particolare non incluso nella tabella seed, si dovrebbe fare qualcosa del genere:
$collection = $customer->getCollection()
->addAttributeToSelect('address1')
->addAttributeToSelect('address2');
$collection->load();
Una raccolta è fondamentalmente solo un elenco di oggetti del database.
Questo diventa una soluzione ben progettata perché gli oggetti non sono accoppiati l'un l'altro come un'unica entità. Invece, puoi filtrare ogni associazione separatamente.
Non inviare commenti su come nessuno del codice qui funzionerebbe in Magento. Questo era per l'illustrazione