Pregunta

Estoy personalizando magento Extensión de preguntas frecuentes Para los elementos de preguntas frecuentes de clasificación por categoría. La colección Below se utiliza para obtener todos los elementos de los elementos de preguntas frecuentes activas.

$collection = Mage :: getModel('flagbit_faq/faq')->getCollection() 
              ->addStoreFilter(Mage :: app()->getStore())
              ->addIsActiveFilter();  

hay tabla de relación "FAQ_CAGATORY_ITEM"

Estructura de la tabla:-

category_id    faq_id
   1              1
   2              2
   1              3 

Así que decido unirme a dos tablas. No tuvo éxito en eso. Lo que probé está abajo.

$tbl_faq_item = Mage::getSingleton('core/resource')->getTableName('faq_category_item');

$collection = Mage :: getModel('flagbit_faq/faq')->getCollection() 
                  ->getSelect()
                  ->join(array('t2' => $tbl_faq_item),'main_table.faq_id = t2.faq_id','t2.category_id')  
                  ->addStoreFilter(Mage :: app()->getStore())
                  ->addIsActiveFilter();

¿Qué hay de malo en esto y cómo puedo filtrar los elementos de categoría particular? Comparta algunos buenos enlaces para aprender colecciones de modelos Magento.

Gracias por adelantado

¿Fue útil?

Solución

El tipo devuelto de getSelect() y join() es un objeto seleccionado, no la colección que addStoreFilter() y addIsActiveFilter() pertenece a. La parte seleccionada debe ocurrir más adelante en la cadena:

$collection = Mage :: getModel('flagbit_faq/faq')->getCollection() 
              ->addStoreFilter(Mage :: app()->getStore())
              ->addIsActiveFilter();
// Cannot append getSelect right here because $collection will not be a collection
$collection->getSelect()
           ->join(array('t2' => $tbl_faq_item),'main_table.faq_id = t2.faq_id','t2.category_id');

Otros consejos

Prueba esta función desde

Mage_Eav_Model_Entity_Collection_Abstract

 /**
 * Join a table
 *
 * @param string|array $table
 * @param string $bind
 * @param string|array $fields
 * @param null|array $cond
 * @param string $joinType
 * @return Mage_Eav_Model_Entity_Collection_Abstract
 */
public function joinTable($table, $bind, $fields = null, $cond = null, $joinType = 'inner')
{

Entonces, para unir las mesas, puede hacer así:

$collection->joinTable('table-to-join','left.id=right.id',array('alias'=>'field'),'some condition or null', joinType(left right inner));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top