在 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);