我一直在尝试使用magento的命令加入两个自定义表。搜索后我遇到了this block of generic code
$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 name
或table doesn't exist
或其他错误等错误。
为了清楚起见,有人可以根据我的理解纠正我
$collection = Mage::getModel('module/model_name')->getCollection();
获取模型的实例。在该模型中是保存所需数据的表(对于此示例,我将调用表p)
$collection->getSelect()
从表p中选择数据
->join()
需要三个参数才能将两个表连接在一起
PARAM1
array('table_alias'=>$this->getTable('module/table_name'))
'您为表格提供的统一名称'=> '要添加到集合中的表(已在模型文件夹中设置)'
PARAM2
'main_table.foreign_id = table_alias.primary_key'
这一点我没有得到(虽然看起来很直接)
我的主表(p)没有外来ID(它有它的主键 - 它也是它的外来ID)?
必须等于您在param1中提供的字母名称
参数3
'main_table.foreign_id = table_alias.primary_key'
从名字
中获取所有内容我的理解在哪里出错了?
答案 0 :(得分: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'));
希望这对你有用!!