如何加载联接2个表的模型数据?


9

假设我有一个目标表A的简单模型A,现在我必须添加一些额外的信息,所以我决定创建一个模型B并将那些额外的信息保存在表B中,并使用指向表A索引键的外键。

通常,联接是在集合中完成的,但是如果我加载模型,则不会调用该集合,而是仅resource model使用。

如何修改模型A还加载从数据表Bload()


好问题...我喜欢
阿米特·贝拉

这是一种EAV的简单实现...我找到了一种解决方案,但在发布之前,我正在等待其他方法并进行测试
2014年

Answers:


11

在资源模型类内部添加以下功能

protected function _getLoadSelect($field, $value, $object)
{
    $select = parent::_getLoadSelect($field, $value, $object);

    $select->joinLeft(
        array('t_b' => 'table_b'),
        $this->getMainTable() . '.id = t_b.id',
        array('columnA'));
    return $select;
}

当您调用时Mage::getModel('modulename/TableA')->load(1),此方法将与table_b联接。


我认为limit(1)这不是必需的:joinLeft()就足够了
2014年

我只是为此树立了榜样。您可以根据需要进行更改。
Sohel Rana 2014年

6

我可以向您提出我使用的方法,这很容易。

脚步:

  1. 重写模型A的资源模型(如果模型A是您的模型而不是Magento,则可以跳过此步骤)

  2. 重写模型A的资源模型的方法_getLoadSelect()。选择查询在此方法中生成,在这里您可以连接其他表。


你击败了我。+1
马里斯(Marius)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.