magento连接表集合

时间:2011-12-01 06:27:57

标签: join magento-1.5 magento

我正在按类别自定义Magento FAQ extension以获取sort 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 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

尝试此功能
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));