首页 > 解决方案 > 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。

标签: phplaraveleloquentlaravel-6

解决方案


我不确定,我从您的描述中了解到,您希望所有员工在每个案例中都有员工详细信息。

调用它,

Case::with('case_employees', 'case_employees.employee')->get();

它将返回所有带有预先加载的员工数组的案例,其中每个员工都将获得预先加载的详细信息对象。


推荐阅读