2014-01-17 53 views
0

我已经研究过,但无法找到此问题的答案。 我加入了所有使用“id”的多个表。zf2“加入为”语法

问题是我需要区分哪个id属于哪个表。在MySQL中是ofcouse的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')) 

谢谢!

回答

1

你非常接近。要定义一个别名为列只写:

->join('tableA', 'tableA.id = tableB.id', array('alias' => 'column_name')) 

你只是错过了结束,并开始一个新的字符串。

0

一个简单的做选择使用连接在我看来不是一个Zend的方式,最好的方法:

只需创建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; 

然后你只需要修改你的实体添加从您的视图中添加新的属性(但我想你已经这样做是为了用你选择使用连接)。

那么只会让你选择的simplys,你会与任何实体做:

$this->$tableGateway->select(); 

逸岸,这里的目标不仅简化了Zend编码您的选择: =>这是全球最好性能分享的工作之间的PHP和SQL ...更多的治疗sql可以管理(通过意见,触发器或存储过程)少做php ...

0

如果我明白你需要实现。您可以执行以下操作。 加入表A与表B在

$select = $sql->select(); 
$select->from(array('A',=>'tableA')); 

$select->join(array('B'=>'tableB'), 
       'A.id = B.A_id',array() 
      );