2016-12-25 66 views
6

我使用的是Laravel 5.3。我有4张桌子。 默认Users表。 Departments,Position,Employees表。Laravel 5.3查询从4个表中获得结果,通过外键连接

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个表中的所有数据?

回答

3

您可以使用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')); 
+0

是什么你的答案,这之间的区别 - http://stackoverflow.com/a/ 29166530/3866364 我试过这样,但不能正确创建关系。 –

+0

你是什么意思的差异?如果您的关系不起作用,请发布另一个问题并添加您的关系代码和外键的确切名称(区分大小写)。 –

+0

对不起,我感到困惑。我的意思是,你的答案只有查询。但在上面评论的其他问题的答案中,使用了Model(用于例如OneToMany,ManyToOne等)。那么,使用像urs这样的查询或使用Modal关系的好处是什么? –

相关问题