【问题标题】:Left join with variable in Zend Framework 2 SelectZend Framework 2 Select 中的左连接变量
【发布时间】:2015-02-09 11:13:58
【问题描述】:

我正在尝试在 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 子句')

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

【问题讨论】:

    标签: php mysql zend-framework2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多