zf2“join as”语法

时间:2014-01-17 11:03:48

标签: php mysql sql zend-framework2

我已经研究过,但找不到这个问题的答案。 我正在加入多个使用“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'))

谢谢!

3 个答案:

答案 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()
            );