1

我一直在尝试使用 magento 的命令加入两个自定义表。搜索后我遇到了这个通用代码块

$collection = Mage::getModel('module/model_name')->getCollection();
$collection->getSelect()->join( array('table_alias'=>$this->getTable('module/table_name')), 
'main_table.foreign_id = table_alias.primary_key',
 array('table_alias.*'), 
'schema_name_if_different');

将此作为模板之后,我尝试将我的表连接在一起,但只返回了诸如incorrect table nametable doesn't exist或其他一些错误之类的错误。

只是为了澄清事情,有人可以根据我的理解纠正我吗

$collection = Mage::getModel('module/model_name')->getCollection();

获取模型的实例。在该模型中是保存所需数据的表(对于本例,我将调用表 p)

$collection->getSelect()

从表 p 中选择数据

->join()

需要三个参数才能将两个表连接在一起

参数 1

array('table_alias'=>$this->getTable('module/table_name'))

'你给表的别名' => '你想添加到集合中的表(这已经在模型文件夹中设置了)'

参数2

'main_table.foreign_id = table_alias.primary_key'

这一点我不明白(虽然看起来很简单)

我的主表 (p) 没有外部 id(它有它的主键 - 这也是它的外部 id)?

必须等于您在 param1 中提供的别名

参数 3

'main_table.foreign_id = table_alias.primary_key'

从别名中获取所有信息

我的理解哪里出错了?

4

1 回答 1

11

请查看下面的 sql join 语句,我在我的项目中使用它,它运行良好。

句法

$collection = Mage::getModel('module/model_name')->getCollection();
$collection->getSelect()->join(Mage::getConfig()->getTablePrefix().'table_name_for_join', 'main_table.your_table_field ='.Mage::getConfig()->getTablePrefix().'table_name_for_join.join_table_field', array('field_name_you_want_to_fetch_from_db'));

工作查询示例

$collection = Mage::getModel('module/model_name')->getCollection();
$collection->getSelect()->join(Mage::getConfig()->getTablePrefix().'catalog_product_entity_varchar', 'main_table.products_id ='.Mage::getConfig()->getTablePrefix().'catalog_product_entity_varchar.entity_id', array('value'));

希望这对你有用!

于 2013-10-16T10:55:09.637 回答