我有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
那么如何重命名连接表中的字段呢?
答案 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()和任何字段设置方法都会抛出异常。)