2010-06-08 17 views
5

Qualcuno può dirmi come fare un join entro MagentoMagento utilizzando partecipare grid.php prepareCollection

Qui è il problema:

<?//kleurtjes 
$collection= Mage::getModel('faq/faq')->getCollection(); 

$collection->getSelect()->join(array('faqcat' => $this->getTable('faqcat/faqcat')), 'faqcat.faqcat_id=faq.faqcat_id' , array('faqcat.*')); 

?> 

Sto cercando di fare un join con la tabella in cui faqcat io uso la chiave faqcat_id.

voglio che quel nome faqcat.name + faq.faq_id venga selezionato perché questi sono i valori che voglio usare nelle colonne.

<? 
    protected function _prepareColumns() 
    { 

     $this->addColumn('faq_id', array(
      'header' => Mage::helper('faq')->__('ID'), 
      'align'  =>'right', 
      'width'  => '50px', 
      'index'  => 'faq_id', 
    )); 

     $this->addColumn('name', array(
      'header' => Mage::helper('faqcat')->__('Titel'), 
      'align'  =>'left', 
      'index'  => 'name', 


    )); 

} 
?> 

dopo aver provato 1000 combinazioni io non so più cosa fare ... chi è disposto ad aiutarmi

questa è la funzione completa:

<? 
    protected function _prepareCollection() 
    { 

    $collection= Mage::getModel('faq/faq')->getCollection(); 
    //$collection->getSelect()->join(array('faqcat' => $this->getTable('faqcat/faqcat')), 'faqcat.faqcat_id=faq.faqcat_id' , array('faqcat.*')); 
    $id = Mage::getModel('customer/session')->getCustomer()->getId(); 

     $this->setCollection($collection); 

    // } 
     return parent::_prepareCollection(); 
    } 

?> 

Giusto per essere chiari questo è sql voglio avere, ma poi il modo in cui Magento

<?//kleurtjes 
SELECT faq.faq_id as id, faqcat_name as name 
FROM faq 
JOIN faqcat 
USING ('faqcat_id') 
?> 

risposta

5

Prova questo:

$collection->getSelect() 
      ->join($this->getTable('faqcat/faqcat'), "faqcat.faqcat_id = main_table.faqcat_id", array(faqcat.*)); 

Si può vedere l'SQL che saranno effettivamente eseguito a prendere la collezione da:

Mage::log($collection->getSelect()->__toString()); 

La classe Varien_Db_Select si basa su Zend_Db_Select, in modo che il Zend documentation è un buon riferimento.

+1

Sintassi alternativa per ottenere la selezione come stringa [(stringa) $ raccolta-> getSelect()]. I risultati sono la stessa cosa, ma alcune persone trovano il pulitore della sintassi. –

+0

utilizzando "__toString()" sembra un po 'più robusto, anche se il typecatsing della stringa funziona in modo efficace lo stesso –

+0

Puoi anche usare semplicemente "echo $ collection-> getSelect()" – simonthesorcerer

5

Ho appena iniziato a sviluppare l'estensione magento (amorevole) e questa è la seconda parte in cui devo mostrare una griglia da due tabelle. (Wow). ma non è così facile dopo aver navigato in internet molto ho raggiunto il mio risultato facendo questo.

$collection = Mage::getModel('linkdirectory/linkdirectory')->getCollection(); 
     $resource = Mage::getSingleton('core/resource'); 

     $collection->getSelect() 
       ->join(
         array('lk'=>$resource->getTableName('linkdirectory/linkcategory')), 
        'lk.cat_id = main_table.cat_id', 
         array('lk.cat_title','lk.cat_id') 
        ); 

/* miniera stava mostrando questo */ /SELEZIONA main_table., lk. cat_title, lk. cat_id DA linkdirectory AS main_table INNER JOIN linkcategory AS lk ON lk.cat_id = main_table.cat_id */

/* per stampare la query corrente */

$ Collezione> printlogquery (true); uscita;

Problemi correlati