我是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;
}
}
答案 0 :(得分:4)
由于您使用的是tableGateway,因此必须获取Sql()的实例:$this->getSql();
使用该实例,您将创建一个Select实例,然后让您执行连接:
$sql = $this->getSql();
$select = $sql->select();
$select->join('TableNameToJoin', 'MainColumnA = JoinColumnA');
然后执行查询,在tableGateway上调用selectWith:
$this->selectWith($select);
如果您希望进一步自定义联接,可以再传递两个:
您还可以通过将Array作为表名称添加到要加入的表中的别名,其中数组的key
是别名,value
是表名。
$select->join(['Alias' => 'TableNameToJoin'], 'MainColumnA = Alias.JoinColumnA', ['ColumnA', 'ColumnB'], $select::JOIN_LEFT);