我有一个包含多个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数据作为绑定参数插入时直接输入,但行为会发生显着变化。地球上到底发生了什么?
答案 0 :(得分:0)
我想说在$districtIds
var的值中必须有一些东西会使Doctrine中的查询构建器跳闸。你能发布这些价值的样本吗?
另外,你看过生成的SQL运行的教程(拖尾SQL日志,还是挂钩到preExecute事件)?我很想看到类似的输出。
(这应该是一个评论,但我的声誉不够高;))