是否可以使用雄辩的ORM进行如下示例所示的选择。
select .. where ... AND ( ( ... AND ...) OR ( ... AND ... )) 这是我的“解决办法”:
$tasks1=$user->Tasks()
->WhereBetween('start_date',array($start,$end))
->where('deleted',0)
->where('dated','=',1)
->where('status','=',$state)
->get();
$tasks2=$user->Tasks()
->WhereBetween('due_date',array($start,$end))
->where('deleted',0)
->where('dated','=',1)
->where('status','=',$state)
->get();
$tasks3=$user->Tasks()
->where('start_date','<',$start)
->where('due_date','>',$end)
->where('deleted',0)
->where('dated','=',1)
->where('status','=',$state)
->get();
$tasks = $tasks1->merge($tasks2);
$tasks = $tasks->merge($tasks3);如您所见,我只是使用和只运行多个查询,而合并它们则模拟OR。
有什么想法吗?谢谢。
发布于 2015-02-16 18:14:55
您确实可以使用Laravel雄辩地执行分组and or查询:
$tasks = Tasks::whereBetween('start_date', array($start,$end))
->where(function($query)
{
->where(function($q)
{
$q->where('column_a', 'foo')
->where('column_b', 'bar');
})
->orWhere(function($q)
{
$q->where('column_c', 'foo')
->where('column_d', 'bar');
})
})
->get();这将产生一个像您描述的那样的查询:
SELECT ... WHERE ... AND ((... AND ...) OR (... AND ...))
有关Laravel中高级where语句的更多信息,请查看此处的文档:http://laravel.com/docs/4.2/queries#advanced-wheres
https://stackoverflow.com/questions/28547332
复制相似问题