2010-06-08 8 views
5

Kann mir jemand sagen, wie man einmagento in grid.php mit beitreten prepareCollection

Hier in magento beitreten zu machen, ist das Problem:

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

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

?> 

i eine Join mit der Tabelle faqcat zu machen versuchen, wo Ich benutze den Schlüssel faqcat_id.

weiter ich möchte, dass faqcat.name + faq.faq_id ausgewählt werden cos dies sind die Werte, die ich in Spalten verwenden möchte.

<? 
    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', 


    )); 

} 
?> 

nach 1000 Kombinationen versuchen, ich weiß nicht mehr, was ich zu tun ..., der bereit ist, mir zu helfen

dies ist die komplette Funktion:

<? 
    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(); 
    } 

?> 

nur klar zu sein, dies ist die sQL-i haben wollen, dann aber die Art und Weise magento

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

Antwort

5

Try this:

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

können Sie die SQL sehen, die tatsächlich ausgeführt werden, die Sammlung holen von:

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

Die Varien_Db_Select Klasse basiert auf Zend_Db_Select, so dass die Zend documentation ist eine gute Referenz.

+1

Alternative Syntax zum Abrufen der Auswahl als Zeichenfolge [(Zeichenfolge) $ collection-> getSelect()]. Ergebnisse sind das gleiche, aber manche Leute finden die Syntax sauberer. –

+0

mit "__toString()" scheint ein bisschen robuster, obwohl typecatsing zu string funktioniert effektiv die gleiche –

+0

Sie könnten auch einfach "echo $ collection-> getSelect()" – simonthesorcerer

5

Ich habe gerade angefangen Magento Erweiterung zu entwickeln (liebe es) und das ist der zweite Teil darin, wo ich ein Gitter aus zwei Tabellen zeigen muss. (Wütend). aber es ist nicht so einfach nach dem Surfen Internet viel erreicht ich mein Ergebnis dadurch.

$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') 
        ); 

/* Mine wurde zeigt das */ /main_table SELECT., lk. cat_title, lk. cat_id VON linkdirectory AS main_table INNER JOIN linkcategory AS lk ON lk.cat_id = main_table.cat_id */

/* die aktuelle Abfrage */

$ Kollektion-> printlogquery (true) drucken; Ausgang;