getDbTable()->select()->where issue (Zend Framework 1.


getDbTable()->select()->where issue (Zend Framework 1.x)

我目前在Zend 1.x中准备了一个查询。选择查询在类中形成,正如您所期望的:

我将按如下方式设置查询:

    // prepare query
    $this->getDbTable()->select()
        ->setIntegrityCheck(false)
        ->from(array('mdt' => 'meta_data_type'))
        ->where('id = :id')
        ->bind(
            array(
                ':id' => $id
            )
        );
    // report SQL for debugging
    echo $this->getDbTable()->select()->__toString();

正如您所看到的,这并不是最难的查询。但是:返回的SQL如下:

SELECT `meta_data_type`.* FROM `meta_data_type`

有人能告诉我如何调试这个吗?在我看来这是正确的。我试着在网上学习这些例子,但考虑到我们的系统方法(位于Mapper模式中,使用非标准的表命名等),这并没有太大帮助。

仅供参考:它返回的实际数据与您对"完整数据集"的"获取行"操作的期望相匹配。。如:第一行形成良好。它只是不受where子句的约束(正如您所期望的那样,SQL中缺少它!)。

仅供参考2:绑定/哪里不是问题所在。如果我把整个结尾改成:

->where('id = 2');

它仍然没有在条款中显示这一点。

您的查询看起来不错,尽管这不是我在ZF1中使用的语法。但是,通过第二次为echo调用$this->getDbTable()->select(),您将输出一个没有任何params的新查询。

最简单的修复方法是将其分配给一个变量:

// prepare query
$select = $this->getDbTable()->select()
               ->setIntegrityCheck(false)
               ->from(array('mdt' => 'meta_data_type'))
               ->where('id = :id')
               ->bind(
                    array(
                        ':id' => $id
                    )
                );
// report SQL for debugging
echo $select;