重命名Zend select / join查询中的字段

时间:2014-10-15 14:21:28

标签: php sql zend-framework zend-db zend-db-table

我有2张桌子:

区域:region_id,name,state_id
:state_id,姓名

我想在结果中使用这两个名称, state.name 重命名为 statename
到目前为止我得到了这个:

$select = $select->from(array('r' => 'region'))->join(array('s' => 'state'),
'r.state_id = s.state_id',array("statename" =>"r.name"));

导致以下查询:

SELECT `r`.*, `r`.`name` AS `statename` FROM `region` AS `r`
INNER JOIN `state` AS `s` ON r.state_id = s.state_id

所以我只需要将 r.name AS statename 更改为 s.name AS statename
但是我无法让它发挥作用。如果我将选择的最后一部分更改为array("statename" =>"s.name"),则会出现错误

Select query cannot join with another table

那么如何重命名连接表中的字段呢?

1 个答案:

答案 0 :(得分:1)

您必须删除完整性检查。

    $table = new self();
    $select = $table->select()->setIntegrityCheck(false);
    $select = $select->from(array('r' => 'region'))->join(array('s' => 'state'),'r.state_id = s.state_id',array("statename" =>"s.name"));

完整性检查用于确保您的查询不会使用其他表中的列,因此可以更新,保存或删除Zend_Db_Table_Row对象。如果你删除了完整性,那么你就告诉Zend你知道自己在做什么,并且想要使用另一个表中的列。

以下是文档中的简要说明:

  

Zend_Db_Table_Select主要用于约束和验证   这样它可以强制执行合法的SELECT查询的标准。然而   在某些情况下,您需要灵活性   Zend_Db_Table_Row组件,不需要可写或可删除   行。对于这个特定的用户案例,可以检索一行或   通过将FALSE值传递给setIntegrityCheck()来进行rowset。所结果的   行或行集将作为“锁定”行返回(表示save(),   delete()和任何字段设置方法都会抛出异常。)