我已经研究过,但找不到这个问题的答案。 我正在加入多个使用“id”的表。
问题是我需要区分哪个id属于哪个表。在mysql中它是这样的AS命令:
tableA.id AS tableAID
如何将其合并到zf2大型查询中,其中多个表使用id。
$select = $sql->select();
$select->from('tableName')
->columns(array('*'))
->join('tableA', 'tableA.id = tableB.id', array('id'))
->join('tableC', 'tableC.id = tableB.id', array('id'))
->where() //sql command continues
我认为我需要的是这样的:
->join('tableA', 'tableA.id = tableB.id', array('id as tableAID'))
->join('tableC', 'tableC.id = tableB.id', array('id as tableCID'))
我认为这样的事情可能有效,但它破坏了代码:
->join('tableA', 'tableA.id = tableB.id', array('id => tableAID'))
谢谢!
答案 0 :(得分:1)
你非常接近。要为列定义别名,只需写:
->join('tableA', 'tableA.id = tableB.id', array('alias' => 'column_name'))
你错过了结束并开始一个新的字符串。
答案 1 :(得分:0)
使用连接进行简单选择的最佳方法在我看来并不是一种趋势:
只需在Sql中创建一个视图!
CREATE VIEW V_My_Select AS
SELECT A.*, B.a_field, C.another_field
FROM table_a AS A
INNER JOIN table_b AS B
ON A.id = B.table_a_id
INNER JOIN table_c AS C
ON A.id = C.table_a_id;
然后你只需修改你的实体就可以添加你视图中添加的新属性了(但我想你已经这样做了以便使用你的select连接)。
然后只使用您对任何实体的简单选择:
$this->$tableGateway->select();
事实上,这里的目标不仅是简化你的选择的zend编码: =>对于全球性能来说,分享php和sql之间的工作更好... sql可以管理的更多处理(通过视图,触发器或存储过程)可以做的事情越少......
答案 2 :(得分:0)
如果我明白你需要意识到什么。您可以执行以下操作。
将表A与表B联系起来 $select = $sql->select();
$select->from(array('A',=>'tableA'));
$select->join(array('B'=>'tableB'),
'A.id = B.A_id',array()
);