2

我是 ZF 的新手,下面有一个代码。我尝试获取自定义列并加入 sql select,但失败了。我尝试使用搜索,但没有找到任何结果。告诉我如何进行更复杂查询的示例。谢谢。

<?php

namespace FcFlight\Model;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use FcFlight\Filter\FlightHeaderFilter;

class FlightHeaderModel extends AbstractTableGateway
{

/**
 * @var string
 */
protected $table = 'flightBaseHeaderForm';

/**
 * @param \Zend\Db\Adapter\Adapter $adapter
 */
public function __construct(Adapter $adapter)
{
    $this->adapter = $adapter;
    $this->resultSetPrototype = new ResultSet();
    $this->resultSetPrototype->setArrayObjectPrototype(new FlightHeaderFilter($this->adapter));
    $this->initialize();
}

/**
 * @param $id
 * @return array|\ArrayObject|null
 * @throws \Exception
 */
public function get($id)
{
    $id = (int)$id;
    $rowSet = $this->select(array('id' => $id));
    $row = $rowSet->current();
    if (!$row) {
        throw new \Exception("Could not find row $id");
    }
    $row->dateOrder = date('Y-m-d', $row->dateOrder);

    return $row;
}
}
4

1 回答 1

4

由于您使用的是 tableGateway,因此您必须获取 Sql() 的实例:$this->getSql();

使用该实例,您将创建一个 Select 实例,然后您可以执行连接:

$sql = $this->getSql();
$select = $sql->select();
$select->join('TableNameToJoin', 'MainColumnA = JoinColumnA');

然后要执行查询,请在 tableGateway 上调用 selectWith:

$this->selectWith($select);

如果您希望进一步自定义连接,您可以再传递两个参数:

  • 您希望选择的列数组
  • 您希望执行的连接类型(例如 LEFT JOIN)

您还可以通过将数组作为表名传递给要加入的表来添加别名,key数组的 是别名,而value是表名。

$select->join(['Alias' => 'TableNameToJoin'], 'MainColumnA = Alias.JoinColumnA', ['ColumnA', 'ColumnB'], $select::JOIN_LEFT);
于 2013-09-06T14:20:53.203 回答