【问题标题】:Zend Framework 2 how to get columns from multiple tables using join?Zend Framework 2 如何使用连接从多个表中获取列?
【发布时间】:2014-04-14 05:56:04
【问题描述】:

我正在使用 ZfcBase\Mapper\AbstractDbMapper 为我的项目编写 mysql 查询。一切都适用于单表查询。如果我加入一些表,结果很好,但唯一的问题是我不知道如何从“加入”表中选择列。这是我的示例代码:

class XYZ extends AbstractDbMapper implements XYZInterface

    {
    public function joinTables() {
         $select = $this->getSelect();
         $select->reset('columns');
         $select->columns(array('colA','colB'))
                   ->join('ABC','ABC.colA=XYZ.colA',array('colB','colC'))
                   ->where(array('XYZ.colA' => 'value1'));
         $resultSet = $this->select($select);
         $myResults= array();
         foreach ($resultSet as $myResult) {
                $myResults[] = $myResult;
         }
         return $myResults;
    }

}

结果 $myResults 实际上是一个 XYZ 实体数组。如何让我的结果集 $myResults 中包含 ABC 实体部分?

【问题讨论】:

  • 适当修改 columns 方法

标签: php mysql sql zend-framework


【解决方案1】:

添加->setIntegrityCheck(false);

我已经更新了你的代码:

public function joinTables() {
     $select = $this->getSelect();
     $select->setIntegrityCheck(false);
     $select->reset('columns');
     $select->columns(array('colA','colB'))
               ->join('ABC','ABC.colA=XYZ.colA',array('colB','colC'))
               ->where(array('XYZ.colA' => 'value1'));
     $resultSet = $this->select($select);
     $myResults= array();
     foreach ($resultSet as $myResult) {
            $myResults[] = $myResult;
     }
     return $myResults;
}

【讨论】:

  • 这仅适用于 ZF 1.x 吗?我正在使用最新版本,在供应商的任何地方都找不到这个函数 setIntegrityCheck。
  • 是的,你只能在 zf 1.x 中使用它,你没有指定你没有使用 zf 2
  • 那么你知道ZF2的解决方案应该是什么吗?
【解决方案2】:
//join with columns

    $select11 = new Select;
    $select11->from('foo')->join('zac', 'm = n', array('bar', 'baz'));
   //'SELECT "foo".*, "zac"."bar" AS "bar", "zac"."baz" AS "baz" FROM "foo" INNER JOIN "zac" ON "m" = "n"';

考虑在examples 找到的上述示例。您的代码应如下所示。

 $select = $this->getSelect();
 $select->from('ABC')->join('XYZ','ABC.colA=XYZ.colA' array('colA','colB'))
                   ->where('XYZ.colA = value1');
         $resultSet = $this->select($select);
         $myResults= array();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多