在Zend Framework 2中选择左连接变量

时间:2015-02-09 11:13:59

标签: php mysql zend-framework2

我试图在Zend Framework 2中进行以下选择:

$select->from($this->table);
    $select->join($this->multiLangTable, $this->table . '.id=' .$this->multiLangTable . '.'
            . $this->foreignKey .' AND '. $this->multiLangTable . ".lang =".$locale, $mapping, 'left');

变量$ locale是我的应用程序的语言(ca,es,en)。问题是应用程序显示和错误说:

  

声明无法执行(42S22 - 1054 - 未知专栏' ca' in   '关于条款')

它将变量检测为列,但它不是列。

2 个答案:

答案 0 :(得分:2)

我之前尝试过相同的方法,但还没有真正找到一个好方法。这是因为Zend只是将on语句中的所有内容作为标识符。您可以将条件移动到where语句

$select->from($this->table);
$select->join($this->multiLangTable, $this->table . '.id=' .$this->multiLangTable . '.'
            . $this->foreignKey, $mapping, \Zend\Db\Sql\Select::JOIN_LEFT);
$select->where(array($this->multiLangTable . ".lang" => $locale));

或者您可以在on语句中使用\Zend\Db\Sql\Expression,但这会删除所有qouting。

$select->join($this->multiLangTable,new \Zend\Db\Sql\Expression($this->table . '.id=' .$this->multiLangTable . '.'
        . $this->foreignKey .' AND '. $this->multiLangTable . ".lang = ? ", $locale), $mapping, 'left');

答案 1 :(得分:1)

我找到了一个适合我的解决方案。

 $select->from($this->table);
 $select->join($this->multiLangTable,new \Zend\Db\Sql\Expression( $this->table . '.id=' .$this->multiLangTable . '.'
            . $this->foreignKey . ' AND '.$this->multiLangTable . '.lang = ?'), $mapping, 'left');
 $statement = $sql->prepareStatementForSqlObject($select);

 $resultsSql = $statement->execute(array($locale));