Laravel 4.1哪里有多对多关系和条件?

时间:2014-03-13 20:58:34

标签: php sql orm laravel eloquent

我正在开发一个应用程序,其中部分需要使用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_categoryidprogram_id列。< / p>

提前感谢您的帮助!

2 个答案:

答案 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();