Php 使用Zend Framework 2中的变量左连接选择

Php 使用Zend Framework 2中的变量左连接选择,php,mysql,zend-framework2,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 =

我尝试在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”) "on子句")


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

我以前也尝试过同样的方法,但还没有找到一个好方法。这是因为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');

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

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