首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推进两个滤波器之间的Symfony2“或”

推进两个滤波器之间的Symfony2“或”
EN

Stack Overflow用户
提问于 2013-09-06 17:16:12
回答 1查看 1.7K关注 0票数 1

我正在尝试从我的数据库中获取一些必须在间隔内启动或结束的数据:

基本SQL查询如下所示:

代码语言:javascript
复制
SELECT broadcast.id, broadcast.id_channel, broadcast.start_at, broadcast.real_start_at, broadcast.real_end_at, broadcast.title, broadcast.sended, FROM `broadcast` 
WHERE (
    (broadcast.real_start_at >= :p1 AND broadcast.real_start_at <= :p2) 
    OR 
    (broadcast.real_end_at >= :p3 AND broadcast.real_end_at <= :p4)) 
    AND broadcast.sended=:p5 AND broadcast.id_plurimedia=:p6 
LIMIT 50

推进查询是这样一个:

代码语言:javascript
复制
$broadcastsQuery = BroadcastQuery::create()
        ->limit(20);
        ->condition('cond1', 'broadcast.real_start_at >= ?', $this->date_start, \Criteria::GREATER_EQUAL)
        ->condition('cond2', 'broadcast.real_start_at <= ?', $this->date_end, \Criteria::LESS_EQUAL)
        ->combine(array('cond1', 'cond2'), \Criteria::LOGICAL_AND, 'cond3')
        ->condition('cond4', 'broadcast.real_end_at >= ?', $this->date_start, \Criteria::GREATER_EQUAL)
        ->condition('cond5', 'broadcast.real_end_at <= ?', $this->date_end, \Criteria::LESS_EQUAL)
        ->combine(array('cond4', 'cond5'), \Criteria::LOGICAL_AND, 'cond6')
        ->where(array('cond3', 'cond6'), null, 'OR');
        ->filterBySended(true)
        ->find();

当我执行我的脚本时,我有以下错误:

代码语言:javascript
复制
Unable to execute SELECT statement [SELECT broadcast.id, broadcast.id_channel, broadcast.id_plurimedia, broadcast.id_aedra, broadcast.start_at, broadcast.real_start_at, broadcast.real_end_at, broadcast.title, broadcast.sended, broadcast.date_creation, broadcast.date_edition FROM `broadcast` WHERE ((broadcast.real_start_at >= :p1 AND broadcast.real_start_at <= :p2) AND (broadcast.real_end_at >= :p3 AND broadcast.real_end_at <= :p4)) AND broadcast.sended=:p5 LIMIT 50] [wrapped: Warning: PDOStatement::bindValue() expects parameter 3 to be long, string given in /var/www/projectKI/vendor/propel/propel1/runtime/lib/connection/DebugPDOStatement.php line 114] (500 Internal Server Error)

我真的不明白为什么我会得到一个错误,为什么我的查询有一个" and“语句而不是"OR”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-07 23:43:14

我注意到Propel不能在包含日期间隔的两个过滤器之间执行简单的“”(_or())。

它也有标准问题,所以我用字符串替换了条件来解决我的问题。

代码语言:javascript
复制
$broadcastQuery->condition('c1', 'broadcast.real_start_at > ?', $this->date_start)
               ->condition('c2', 'broadcast.real_start_at < ?', $this->date_end)
               ->combine(array('c1', 'c2'), 'and', 'c3')
               ->condition('c1', 'broadcast.real_end_at > ?', $this->date_start)
               ->condition('c2', 'broadcast.real_end_at < ?', $this->date_end)
               ->combine(array('c1', 'c2'), 'and', 'c4')
               ->combine(array('c3', 'c4'), 'or');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18663153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档