在 Zend Framework 2 中合并
Coalesce in Zend Framework 2
我有以下 sql select :
SELECT c.id, c.code, c.closed, COALESCE( c2.name, c.name ) AS name
FROM `centers` c
LEFT JOIN `centers_i18n` c2 ON c2.center_id = c.id
AND c2.lang = 'ES'
在我的 zend 应用程序中有以下 select:
$select = $sql->select();
$select->from($this->table);
$select->join($this->multiLangTable, $this->table . '.id=' .$this->multiLangTable . '.' . $this->foreignKey, $mapping);
$select->where($conditions);
是一样的,但我不知道如何从列名合并。
您必须指定要select的列并添加一个作为表达式
$select->columns(
array(
...
'name' => new \Zend\Db\Sql\Expression('COALESCE( c2.name, c.name )')
...
)
);
整个代码应该接近于此(我有一段时间没有使用 Zend,所以这里可能有错误):
$select = $sql->select();
$select->columns([
'id' => 'id',
'code' => 'code',
'closed' => 'closed',
'name' => new \Zend\Db\Sql\Expression('COALESCE( c2.name, c.name )')
]);
$select->from(['c' => $this->table]);
$select->join(['c2' => $this->multiLangTable], 'c.id = c2.' . $this->foreignKey, $mapping);
$select->where($conditions);
我有以下 sql select :
SELECT c.id, c.code, c.closed, COALESCE( c2.name, c.name ) AS name
FROM `centers` c
LEFT JOIN `centers_i18n` c2 ON c2.center_id = c.id
AND c2.lang = 'ES'
在我的 zend 应用程序中有以下 select:
$select = $sql->select();
$select->from($this->table);
$select->join($this->multiLangTable, $this->table . '.id=' .$this->multiLangTable . '.' . $this->foreignKey, $mapping);
$select->where($conditions);
是一样的,但我不知道如何从列名合并。
您必须指定要select的列并添加一个作为表达式
$select->columns(
array(
...
'name' => new \Zend\Db\Sql\Expression('COALESCE( c2.name, c.name )')
...
)
);
整个代码应该接近于此(我有一段时间没有使用 Zend,所以这里可能有错误):
$select = $sql->select();
$select->columns([
'id' => 'id',
'code' => 'code',
'closed' => 'closed',
'name' => new \Zend\Db\Sql\Expression('COALESCE( c2.name, c.name )')
]);
$select->from(['c' => $this->table]);
$select->join(['c2' => $this->multiLangTable], 'c.id = c2.' . $this->foreignKey, $mapping);
$select->where($conditions);