2014-02-27 84 views
0

相关的代码是在:https://gist.github.com/morganhein/9254678查询ORM与WHERE子句 - 锋/ Laravel 4

我有嵌套资源控制器,其中查询数据库中的类似结构的表。

如果我访问www.example.com/v1/jobs/1/departments,我想查询与作业1相关的所有部门。但是我无法弄清楚如何使用ORM来实现这一点。

帮助?

+0

你'jobs'表没有用'departments'声明的赫志。你必须在你的'Jobs'模型上做到这一点。 –

+0

我很困惑,我jobs.php(模型)就指出: \t公共职能部门() \t { \t \t回$这个 - >的hasMany( '部'); \t} 是不是我所需要的? – Morgan

+0

它应该是。不这样工作?如果没有,请发布您的模型代码。 –

回答

1

我没有测试,但我建议你去尝试这样的:

Route::resource('/v1/jobs/{id}/departments', 'DepartmentController');  
Route::resource('/v1/jobs', 'JobController'); 

之后,你DepartmentController方法将接受一个参数,它是作业ID,你的情况。如果您使用id检索任何特定模型,则使用find()方法更容易。当您找到该模型时,您可以访问相关模型。

class DepartmentsController extends BaseController { 

    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index($jobId) 
    { 
     Clockwork::startEvent('List_Default_Departments', 'Starting.'); 
     $positions = Auth::user()->jobs()->find($jobId)->departments; 
     Clockwork::endEvent('List_Default_Departments', 'Done.'); 
     return Response::json($positions->toArray()); 
    } 
} 

注:有$job->departments()之间的不同(返回生成器对象来创建更复杂的查询)和$job->departments(直接返回Collection对象)。

此外,如果你想获得的所有相关部门的工作列表,你可以随时拨打:

$jobs = Auth::user()->jobs()->with('departments')->get(); 
+0

感谢这个,它是有帮助的,然而afaik find()函数查找$ jobId对主键的索引值,但$ jobId是非唯一而不是主键(但是,对于该用户来说它是唯一的)。 – Morgan

+0

好的,很好。无论如何,'Auth :: user() - > jobs() - > where('job_id',$ jobId) - > with('departments') - > get();'我应该可以工作。 – cheelahim