Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 推进Symfony2“;或;在两个过滤器之间_Php_Sql_Symfony_Propel - Fatal编程技术网

Php 推进Symfony2“;或;在两个过滤器之间

Php 推进Symfony2“;或;在两个过滤器之间,php,sql,symfony,propel,Php,Sql,Symfony,Propel,我正在尝试从数据库中获取一些数据,这些数据必须在一段时间内开始或结束: 基本SQL查询如下所示: 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

我正在尝试从数据库中获取一些数据,这些数据必须在一段时间内开始或结束:

基本SQL查询如下所示:

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
从“广播”中选择broadcast.id、broadcast.id\u频道、broadcast.start\u at、broadcast.real\u start\u at、broadcast.real\u end\u at、broadcast.title、broadcast.sended
在哪里(
(broadcast.real_start_在>=:p1和broadcast.real_start_在=:p3和broadcast.real_end_在限制(20)处);
->条件('cond1','broadcast.real\u start\u at>=?',$this->date\u start,\Criteria::morerar\u EQUAL)
->条件('cond2','broadcast.real\u start\u at=?',$this->date\u start,\Criteria::morerar\u EQUAL)

->condition('cond5','broadcast.real_end_at我注意到,在包含日期间隔的两个过滤器之间,spreep无法执行简单的“或””(_或()

而且它在标准方面也有问题,所以我用字符串替换标准来解决问题

$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');
$broadcastQuery->condition('c1','broadcast.real\u start\u at>?',$this->date\u start)
->条件('c2','broadcast.real_start_在<?',$this->date_end)
->组合(数组('c1','c2'),'c3')
->条件('c1','broadcast.real\u end\u at>?',$this->date\u start)
->条件('c2','broadcast.real_end_at<?',$this->date_end)
->组合(数组('c1','c2'),'和''c4'))
->组合(数组('c3','c4'),'or');

我注意到,在包含日期间隔的两个过滤器之间,spreep无法执行简单的“或””(_或()

而且它在标准方面也有问题,所以我用字符串替换标准来解决问题

$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');
$broadcastQuery->condition('c1','broadcast.real\u start\u at>?',$this->date\u start)
->条件('c2','broadcast.real_start_在<?',$this->date_end)
->组合(数组('c1','c2'),'c3')
->条件('c1','broadcast.real\u end\u at>?',$this->date\u start)
->条件('c2','broadcast.real_end_at<?',$this->date_end)
->组合(数组('c1','c2'),'和''c4'))
->组合(数组('c3','c4'),'or');

对于使用“最小”和“最大”的任何范围过滤器也是如此:OR将仅适用于两个条件之一。对于使用“最小”和“最大”的任何范围过滤器也是如此:OR将仅适用于两个条件之一。
$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');