【问题标题】:rename fields in Zend select/join queryZend 选择/加入查询中的重命名字段
【发布时间】:2014-10-15 14:21:28
【问题描述】:

我有 2 个表:

region:region_id,name,state_id
state:state_id,name

我希望结果中包含两个名称,将 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

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

【问题讨论】:

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


    【解决方案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() 来设置行集。所结果的 行或行集将作为“锁定”行返回(意味着 save(), delete() 和任何字段设置方法都会抛出异常)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多