zf2从连接表中选择列 - 如何?

mut*_*ron 7 zend-framework2

我觉得我必须错过一些非常简单的事情.这是一个非常简单的任务,我想要做的就是:

SELECT * FROM lookup_items
JOIN lookup ON lookup_items.lookup_id = lookup.id
Run Code Online (Sandbox Code Playgroud)

这将返回常规SQ​​L中所有连接表的所有列.这是我在zf2中的尝试:

$select = new Select();

$select->from('lookup_items');
$select->join('lookup', 'lookup_items.lookup_id = lookup.id');
Run Code Online (Sandbox Code Playgroud)

结果集仅包含'lookup_items'中的列.我已经尝试了各种方法来获取"查找"列,包括:

$select->columns(array('lookup_items.*', 'lookup.*'));
Run Code Online (Sandbox Code Playgroud)

但他们都爆炸了.当然有一种方法可以做到这一点,它就是这么简单,我完全错过了它.

我认为一个简单的例子可以避免混淆,但这里有更多的代码:

class LookupItemsTable extends AbstractTableGateway
{
public function getList($resource)
{
    $system_name = str_replace('*', '%', strtoupper($resource));

    $joinTable = 'lookup';

    $select = new Select();

    $select->from($this->table);
    $select->join($joinTable, "{$this->table}.lookup_id = {$joinTable}.id");

    $where = array();
    $where[] = "{$this->table}.enabled is true";
    $where[] = "{$joinTable}.enabled is true";
    $where[] = "UPPER({$joinTable}.system_name) ilike '{$system_name}'";

    $select->where($where);

    $sort[] = 'sort_order ASC';
    $sort[] = 'value ASC';
    $select->order($sort);

    $rowset = $this->selectWith($select);

    return $rowset;
}
}
Run Code Online (Sandbox Code Playgroud)

哪里:

$resource = $this->params()->fromRoute('resource', 'BUSINESS');
Run Code Online (Sandbox Code Playgroud)

$ this-> table是'lookup_items'.我真正想做的就是从两个连接表中获取列.我想有一种zf2方法可以在没有所有OO falderal的情况下制作一个直接的SQL语句,所以我可以这样强制它.但我宁愿尽可能在框架内工作.

Raj*_*Raj 7

只需改变这一行

$select->join('lookup', 'lookup_items.lookup_id = lookup.id');
Run Code Online (Sandbox Code Playgroud)

$select->join('lookup', 'lookup_items.lookup_id = lookup.id', array('lookupcol1', 'lookupcol2');
Run Code Online (Sandbox Code Playgroud)


mut*_*ron 1

我想到了。

添加了这个:

$select->columns(array('*'));
Run Code Online (Sandbox Code Playgroud)

然后这接近尾声了:

$sql = new Sql($this->adapter);
$statement = $sql->prepareStatementForSqlObject($select);
$rowset = $statement->execute();
Run Code Online (Sandbox Code Playgroud)

这将返回预期结果,但需要注意的是,现在我的行​​作为关联数组而不是对象返回。