Doctrine 1.2中Doctrine_Query的奇怪行为

时间:2013-04-17 03:32:27

标签: php doctrine-1.2 doctrine-query

我有一个包含多个orWhere语句的查询。 PHP代码如下所示:

$firstDay = $params['datetimeForMonth']->format('Y-m-d');
$lastDay = $params['datetimeForMonth']->format('Y-m-t 23:59:59');
$whereStatement = "(s.level = ?
    AND s.idForLevel IN (?) 
    AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay')";
$q = Doctrine_Query::create()
    ->from('Mmb_Model_Schedule s')
    ->where($whereStatement, ['prefecture', $this->id])
    ->orWhere($whereStatement, ['district', $districtIds])
    ->orWhere($whereStatement, ['municipality', $municipalityIds])
    ->orWhere($whereStatement, ['workplace',    $workplaceIds])
    ->orWhere($whereStatement, ['user', $userIds]);

变量$ districtIds,$ municipalityIds,$ workplaceIds和$ userIds都是以逗号分隔值提前定义的。

除了区域ID之外,此查询对每个级别都适用。任何具有“区”级别的记录都不会在查询中返回。

真正奇怪的是,如果我不使用绑定参数而是插入以下代码,一切正常:

->orWhere("s.level = 'district' AND s.idForLevel IN ($districtIds) AND s.startDatetime BETWEEN '$firstDay' AND '$lastDay'")

更令人愤怒的是,即使这个查询本身作为单个where语句(不包括所有其他语句)完成,如果我使用绑定参数也不会给我任何内容。

而且好像这还不够,我甚至尝试更新表格,将'district'更改为'prefDistrict',以防万一'district'这个词造成问题。什么都没有改变。

尽管我将EXACT SAME数据作为绑定参数插入时直接输入,但行为会发生显着变化。地球上到底发生了什么?

1 个答案:

答案 0 :(得分:0)

我想说在$districtIds var的值中必须有一些东西会使Doctrine中的查询构建器跳闸。你能发布这些价值的样本吗?

另外,你看过生成的SQL运行的教程(拖尾SQL日志,还是挂钩到preExecute事件)?我很想看到类似的输出。

(这应该是一个评论,但我的声誉不够高;))

相关问题