我觉得我必须错过一些非常简单的东西。这是一个非常简单的任务,我想做的就是得到类似的东西:
SELECT * FROM lookup_items
JOIN lookup ON lookup_items.lookup_id = lookup.id
这将在常规 SQL 中返回所有连接表的所有列。这是我在 zf2 中的尝试:
$select = new Select();
$select->from('lookup_items');
$select->join('lookup', 'lookup_items.lookup_id = lookup.id');
结果集仅包括“lookup_items”中的列。我尝试了各种方法来获取“查找”列,包括:
$select->columns(array('lookup_items.*', 'lookup.*'));
但他们都只是爆炸。当然有一种方法可以做到这一点,而且它是如此简单,我完全错过了它。
我认为一个简单的例子可以避免混淆,但这里有更多代码:
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;
}
}
在哪里:
$resource = $this->params()->fromRoute('resource', 'BUSINESS');
$this->table 是“lookup_items”。我真正想做的就是从两个连接表中获取列。我想有一种 zf2 方法可以在没有所有 OO falderal 的情况下直接创建 SQL 语句,所以我可以强制这样做。但我宁愿尽可能在框架内工作。