Hai diversi modi per accedere ai dati da magento :
-
usando load() => carica TUTTI i dati (attributi) relativi ad un modello. È molto lento e micidiale per le prestazioni. Per un prodotto, dovresti utilizzare un load() solo nella pagina del prodotto (perché tutti i dati che utilizzerai in quella pagina sono relativi a un singolo oggetto .. quindi puoi caricarlo per intero)
-
using collection => quando devi recuperare un elenco di oggetti, devi usare (almeno) una collection. Sta a te decidere l'elenco di attributi che desideri recuperare. Puoi aggiungere attributi per selezionare/filtrare e la raccolta riuscirà a fare i join SQL alle tabelle EAV ecc... in background
-
l'utilizzo di SQL personalizzato => la raccolta può essere lenta quando si ha a che fare con oggetti complessi (una raccolta inizializza molti join SQL alla tabella che potrebbero non essere necessari)... l'ultimo metodo per accedere ai dati da BDD è creare il proprio SQL nel proprio ResourceModel
Nello script che mostri, c'è un enorme errore:carichi un modello completo all'interno di un foreach iterando su una raccolta. Non devi mai farlo, se devi caricare() il prodotto, suppongo sia perché non hai trovato un attributo nella raccolta? In tal caso devi solo modificare la collezione per recuperare l'attributo...
Per un prodotto, ad esempio, magento offre un modo per aggiungere (o rimuovere) automaticamente attributi a qualsiasi prodotto->raccolta di cui hai creato un'istanza. (vedi tag XML frontend/product/collection/attributes nel config.xml di Mage_Catalog)