2010-06-08 12 views
5

Puede alguien decirme cómo hacer una unión dentro de MagentoMagento usando unirse a grid.php prepareCollection

Aquí está el 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.*')); 

?> 

que estoy tratando de hacer una unan a la mesa donde faqcat utilizo la clave faqcat_id.

futher Quiero que faqcat.name + faq.faq_id se seleccionen porque estos son los valores que deseo usar en las columnas.

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


    )); 

} 
?> 

1000 después de probar combinaciones no sé qué más hacer ... ¿quién está dispuesto a

ayudar a esta es la función 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(); 
    } 

?> 

Para que quede claro que esto es el sql quiero tener, pero luego el camino Magento

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

Respuesta

5

Prueba esto:

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

Se puede ver el SQL que realmente va a correr a buscar la colección por:

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

La clase Varien_Db_Select se basa en Zend_Db_Select, por lo que el Zend documentation es una buena referencia.

+1

Sintaxis alternativa para obtener la selección como una cadena [(cadena) $ collection-> getSelect()]. Los resultados son la misma cosa, pero algunas personas encuentran la sintaxis más limpia. –

+0

usando "__toString()" parece un poco más robusto, aunque typecatsing to string funciona efectivamente el mismo –

+0

También podría usar "echo $ collection-> getSelect()" – simonthesorcerer

5

acabo de comenzar a desarrollar la extensión de magento (me encanta) y esta es la segunda parte en la que tengo que mostrar una grilla de dos tablas. (Uf). pero no es tan fácil después de navegar por Internet mucho logré el resultado de la mina al hacer esto.

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

/* la mina estaba mostrando esto */ /SELECT main_table., lk. cat_title, lk. cat_id DE linkdirectory AS main_table INNER JOIN linkcategory COMO EN lk lk.cat_id = main_table.cat_id */

/* Para imprimir la consulta actual */

$ colección-> printlogquery (true); salida;