【问题标题】:Filtering eloquent relationship many to many query过滤 eloquent 关系多对多查询
【发布时间】:2018-01-30 13:10:40
【问题描述】:

我有 用户、部门、职位、表格。

用户属于多个部门
部门有很多职位
用户属于多个职位

我想要一个查询,该查询将为单个部门提供用户列表及其在该部门中的职位。

    $department = DepartmentView::with(['users.positions' => function($query) {
                        // do something?
                        }])->where('tag', $tag)
                        ->get();

我也通过标签而不是 ID 获得部门。 职位表没有标签列,只有部门ID。

--

我可以通过定义静态 ID 使其工作,但问题是我通过标签获取部门。

public function getDepartmentByTag($tag) {
$departmentId = 1; FOR TESTING PURPOSE, IT WORKS
$department = DepartmentView::with(['users.positions' => function($query) use($departmentId) {
                            $query->whereHas('department', function($query) use($departmentId) {
                                $query->where('departmentId', $departmentId);
                            });
                        }])->where('tag', $tag)
                        ->get();
}

【问题讨论】:

  • DepartmentView::with('users.positions' )->where('tag', $tag)->get() 这应该可以解决问题
  • 以前是这样,但它给出了用户在他所在部门的所有职位。
  • @JonathanLightbringer 在哪个表中有tag 列?
  • 如果您提供您在模型中定义的关系会更好
  • Alexey Mezenin,在部门表中。

标签: laravel eloquent


【解决方案1】:

我只想获取部门中的用户职位

DepartmentView::with(['users.positions' => function($q) use($tag) {
        $q->whereHas('department', function($q) use($tag) {
            $q->where('tag', $tag);
        });
    }])
    ->get();

【讨论】:

  • 它给了我 0 个结果。部门名称来自哪里?
  • @JonathanLightbringer 这只是一个例子。使用id 或name 或tag 或任何你喜欢的。如果要使用tag 过滤部门,请删除->where('tag', $tag) 并将$q->where('name', $departmentName); 更改为$q->where('tag', $tag);。另外,不要忘记更新use() 子句。
  • @JonathanLightbringer 如果您想按标签过滤users.postitions.department,请使用更新后的代码。
  • 我只能通过使用departmentId(我通过定义一个静态变量进行测试)而不是departmentName来让它工作,但我不知道我从哪里得到departmentId(因为我通过标签过滤了查询)。顺便说一句,使用标签不起作用。 (可能是因为位置表没有标签列?)
  • @JonathanLightbringer 代码将通过tag 过滤,它位于departments 表中。
猜你喜欢
  • 2021-02-24
  • 2017-11-03
  • 2023-04-01
  • 2013-09-14
  • 1970-01-01
  • 2013-05-03
  • 2014-10-31
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多