使用 Eloquent Laravel 处理多个 "AND" 和 "OR"
Handling multiple "AND"s and "OR"s using Eloquent Laravel
是否可以使用 Eloquent ORM 像下面的示例那样制作 select。
select .. where ... AND ( ( ... AND ...) OR ( ... AND ... ))
这是我的"workaround":
$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);
如您所见,我只是 运行 多个仅使用 AND 的查询,而将它们合并模拟 OR。
有什么想法吗?谢谢。
您确实可以使用 Laravels Eloquent:
执行分组 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
是否可以使用 Eloquent ORM 像下面的示例那样制作 select。
select .. where ... AND ( ( ... AND ...) OR ( ... AND ... ))
这是我的"workaround":
$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);
如您所见,我只是 运行 多个仅使用 AND 的查询,而将它们合并模拟 OR。
有什么想法吗?谢谢。
您确实可以使用 Laravels Eloquent:
执行分组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