коллекция столов magento - PullRequest
       6

коллекция столов magento

4 голосов
/ 01 декабря 2011

Я настраиваю Magento Расширение FAQ для сортировки часто задаваемых вопросов по категориям. Ниже коллекция используется для получения всех активных элементов faq.

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

есть таблица отношений " faq_category_item"

Структура таблицы: -

category_id    faq_id
   1              1
   2              2
   1              3 

Поэтому я решил объединить две таблицы. Я потерпел неудачу в этом.То, что я попробовал, приведено ниже.

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

Что в этом плохого и как я могу отфильтровать отдельные элементы категории. Пожалуйста, поделитесь некоторыми хорошими ссылками, чтобы изучить коллекции моделей Magento.

Заранее спасибо

Ответы [ 2 ]

8 голосов
/ 01 декабря 2011

Возвращаемый тип из getSelect() и join() является объектом выбора, а не коллекцией, к которой относятся addStoreFilter() и addIsActiveFilter().Выбранная часть должна появиться позже в цепочке:

$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');
4 голосов
/ 01 декабря 2011

Попробуйте эту функцию с

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')
{

Таким образом, для объединения таблиц вы можете сделать это так:

$collection->joinTable('table-to-join','left.id=right.id',array('alias'=>'field'),'some condition or null', joinType(left right inner));
...