【问题标题】:Laravel 5.3 query to get results from 4 tables which has connections via Foreign KeyLaravel 5.3 查询从通过外键连接的 4 个表中获取结果
【发布时间】:2017-05-10 12:59:33
【问题描述】:

我正在使用 Laravel 5.3。我有 4 张桌子。 默认Users 表。 DepartmentsPositionEmployees 表。

Users 表有ID | Email | Password

Departments 表有ID | Department | User_Id - 这里User_Id 是来自Users 表的ID 的外键

Positions 表有ID | Position | Department_Id - 这里Department_Id 是外键来自Departments 表的ID

Employees 表有ID | Employee | Position_Id - 这里Position_Id 是来自Positions 表的ID 的外键

用户可以有多个DepartmentsDepartments可以有多个PositionsPositions可以有多个Employees。那么,如果用户不同,我如何从该用户创建的所有 4 个表中检索所有数据?

【问题讨论】:

    标签: laravel laravel-5 laravel-5.3


    【解决方案1】:

    你可以使用nested eager loading:

    $departments = Department::where('user_id', $id)
        ->with('positions', 'positions.employees')
        ->get();
    

    另一种方法是构建简单查询:

    $departments = Department::where('user_id', $id)->get();
    $positions = Position::whereIn('department_id', $departments->pluck('id'));
    $employees = Employee::whereIn('position_id', $positions->pluck('id'));
    

    【讨论】:

    • 你的答案和这个有什么区别-stackoverflow.com/a/29166530/3866364我试过这样,但无法正确创建关系。
    • 差异是什么意思?如果您的关系不起作用,请发布另一个问题并添加您的关系代码和外键的确切名称(区分大小写)。
    • 很抱歉给您带来了困惑。我的意思是,你的答案只有查询。但在其他问题的答案中,我分享了上面的评论,使用了模型(例如 OneToMany、ManyToOne 等)。那么,使用 urs 之类的查询或使用 Modal 关系有什么好处?
    • 感谢您的改写,现在我明白了。没有区别,因为在我的示例(第一个解决方案)中,我使用了关系 positions()employees()。我们将需要设置这些以使第一个解决方案代码工作。只需在适当的模型中添加这些关系(我相信都是hasMany())。
    • 在这种情况下使用关系要方便得多。但是如果你不想使用关系,你可以使用where() 来处理集合。举个例子:像往常一样迭代部门@foreach ($departments as $department),在那个循环中迭代像@foreach ($positions->where('department_id', $department->id) as $position)这样的职位。
    猜你喜欢
    • 2023-03-27
    • 2018-08-17
    • 1970-01-01
    • 2023-03-20
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多