我正在开发一个应用程序,其中一部分需要使用 AND 搜索同一模型上的多个不同字段 - 又名查找年龄 whereBetween $from
和 $to
并且性别是 $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
和 category_id
。
预先感谢您的帮助!
最佳答案
所以,最后弄明白了:
$query = Program::whereHas('categories', function($q) use ($categories)
{
$q->whereIn('categories.id', $categories);
});
'categories'
是我的程序模型中关系函数的名称。 $categories
是我的类别 ID 数组。再次感谢您的帮助。
关于php - Laravel 4.1 WhereIn w/多对多关系和条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22390767/