Php Laravel 4.1其中w/多对多关系和条件?

Php Laravel 4.1其中w/多对多关系和条件?,php,sql,orm,laravel,eloquent,Php,Sql,Orm,Laravel,Eloquent,我正在开发一个应用程序,其中部分应用程序需要搜索同一型号上的多个不同字段,并使用和-AKA查找年龄,其中$from和$to之间,性别是$gender。我迷路的地方是,这个模型与Category有多对多的关系,我需要在同一个查询中按Category进行过滤。我试图在一个查询中实现这一点,因为它需要非常快 以下是我到目前为止的情况: $categories = Input::get('categories'); $query = Program::with('categories'

我正在开发一个应用程序,其中部分应用程序需要搜索同一型号上的多个不同字段,并使用和-AKA查找年龄
,其中$from
$to
之间,性别是
$gender
。我迷路的地方是,这个模型与Category有多对多的关系,我需要在同一个查询中按Category进行过滤。我试图在一个查询中实现这一点,因为它需要非常快

以下是我到目前为止的情况:

    $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();
我从许多不同的来源收集了这些信息,我想知道这是否有效,或者这是否是最有效的方法。当然有一个表
程序
,一个表
类别
,还有一个表
程序_类别
,其中列
id
程序_id
,和
类别_id


提前感谢您的帮助

如果在您查询的正确表中有字段可用,则可以这样编写:

$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();

所以,最后我想出来了:

$query = Program::whereHas('categories', function($q) use ($categories)
    {
        $q->whereIn('categories.id', $categories);
    });

'categories'
是我的程序模型上关系函数的名称
$categories
是我的类别ID数组。再次感谢您的帮助。

谢谢!我现在要试试这个。。。我会跟进的。不,这不起作用,但我没有充分解释是我的错。类别是它自己的模型,这个模型程序与它有多对多的关系。我试图从复选框中的输入数组中按类别ID筛选程序。这些类别ID位于类别模型上。因此,我需要查询请求类别中的程序,然后根据其他输入进行过滤。我认为这种事情是我需要做的,但我不知道我在做什么:
$query=Program::whereHas('category',function($q)use($categories){$q->where('category',$categories);})