php - laravel 查询 - 在两个相关表之间使用多个条件约束
问题描述
我是 Laravel 的新手。我的项目有问题。同样,我有2个结构表如下:
cases (id, name, customer_id, abc, xyz)
case_employees (id, case_id, employee_id, customer_id)
employees (id, name)
表之间的关系:
$case->hasMany(CaseEmployee::class, 'case_id');
$case_employee->belongsTo(Employee::class, 'employee_id');
我的查询如下:
Case::with(['case_employees' => function($query) {
$query->with('employee:id,name')
->where(['cases.customer_id', '=', 'case_employees.customer_id'])
->first();
}])->get();
我的问题是这样的:->where(['cases.customer_id', '=', 'case_employees.customer_id'])。即用case_employees,用employee(额外条件:cases.customer_id = case_employees.customer_id)获取案例列表。
我想得到:
$cases = [
id: 123,
name: 'abc',
customer_id: 234,
case_employees: [
id: 1,
case_id: 123,
employee_id: 2,
customer_id: 234,
employee: [
id: 2,
name: 'def',
]
],
case_employees: [
id: 2,
case_id: 123,
employee_id: 3,
customer_id: 234,
employee: [
id: 3,
name: 'xyz',
]
],
]
有人可以帮我正确查询吗?您也可以使用 DB::query() 。
除了传递外键之外,我还想检查两个表之间的更多条件。例如,case 上的 customer_id 和 case_employees 上的 customer_id。
解决方案
我不确定,我从您的描述中了解到,您希望所有员工在每个案例中都有员工详细信息。
调用它,
Case::with('case_employees', 'case_employees.employee')->get();
它将返回所有带有预先加载的员工数组的案例,其中每个员工都将获得预先加载的详细信息对象。
推荐阅读
- laravel - 在 laravel 中安装身份验证
- c# - 根据半径计算球心,两点
- c++ - 从 submachine 在outerSM 的正交区域上提升 MSM 调用 .process_event
- .net - 如何在不实际编写任何内容的情况下测试目录在跨平台 .NET 中是否可写?
- c++ - quickfix 中的 UtcTimeStamp/UtcDate/LocalTimeStamp/LocalData 类
- c# - unity debug ray 每次都指向指向的对象
- python - python属性错误:“模块”对象没有属性“fft”
- azure - Azure DevOps Rest API Powershell 调用共享服务连接失败
- python - 打开大geotif文件
- python - systemd 如果服务在超时时结束,则不会为该进程捕获任何日志。/