基于查询

时间:2016-06-15 13:36:00

标签: laravel laravel-5 laravel-5.1

我正在尝试根据查询获得结果,但不知道如何以这种方式执行此操作。我有属于用户的项目。所以项目有一个user_id 然后,用户属于某个部门,因此用户表具有department_id。

如果我拉出项目的结果,我会看到类似的东西。

id: 3
projectName: This is a project
user_id: 99
deleted_at: 2016-06-15 09:28:00
created_at: 2016-06-14 14:34:16
updated_at: 2016-06-15 09:28:00

如果我提取用户数据,我会看到

id: 99
userName: Some Name
userEmail: email@email.com
active: 1
department_id: 4
created_at: 2016-06-13 09:56:59
updated_at: 2016-06-13 12:16:28

最后,如果我检查我得到的部门

id: 4
departmentName: Department A
created_at: 2016-06-09 12:09:43
updated_at: 2016-06-15 08:03:45

在我的控制器中,我可以执行以下操作来获取所有项目

$projects = Project::dateDescending()->get();

但是,这次我只想获得部门A用户制作的项目。目前我正在做

$projects = Project::dateDescending()->get();
if(!empty($projects)) {
    foreach ($projects as $project) {
        dd($project->user->department->where('departmentName', 'Department A'));
    }
}

上面的问题是它返回一个部门对象,而不是Project对象。 所以我的计划是让部门A的用户完成所有项目。我将如何做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

假设您的模型设置正确,您可以在Eloquent中完全轻松地完成此操作。

$projects = \App\Project::whereHas('users.departments', function($q) {
    $q->where('departmentName', 'Department A');
})->get();