我正在开发一个应用程序,其中部分需要使用AND搜索同一模型上的多个不同字段 - AKA找到年龄whereBetween $from
和$to
并且性别为{{1 }}。我迷路的地方是这个模型与Category有很多关系,我需要在同一个查询中按类别过滤。我试图在一个查询中执行此操作,因为它需要非常快。
这是我到目前为止所做的:
$gender
我已经从许多不同来源汇总了这些内容,我想知道这是否有效,或者它是否是最有效的方法。当然有一个表 $categories = Input::get('categories');
$query = Program::with('categories')->whereIn('category', $categories)->query();
if ($ages = Input::get('ages')) {
$query->whereBetween('age',array($from,$to));
}
if ($gender = Input::get('gender')) {
$query->where('gender','like', $gender);
}
// Executes the query and fetches it's results
$programs = $query->get();
,一个表programs
和一个表categories
,其中包含program_category
,id
和program_id
列。< / p>
提前感谢您的帮助!
答案 0 :(得分:3)
所以,最终想出来了:
$query = Program::whereHas('categories', function($q) use ($categories)
{
$q->whereIn('categories.id', $categories);
});
'categories'
是我的程序模型上关系函数的名称。 $categories
是我的类别ID数组。再次感谢您的帮助。
答案 1 :(得分:0)
如果您查询的字段在右表中可用,则可以使用,您可以这样写:
$categories = Input::get('categories');
$query = Program::with('categories')->whereIn('category', $categories);
// declare $from and $to if not available in the current scope
if ($ages = Input::get('ages')) $query->whereBetween('age', array($from,$to));
if ($gender = Input::get('gender')) $query->where('gender', $gender);
// Executes the query and fetches it's results
$programs = $query->get();