laravel запрос - использовать несколько условных ограничений между двумя связанными таблицами - PullRequest
0 голосов
/ 18 марта 2020

Я новичок ie до 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();

Моя проблема что-то вроде этого: -> где (['case.customer_id', '=', 'case_employees.customer_id']) . То есть получить список дел с case_employees, с сотрудником (дополнительное условие: case.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 ().

В дополнение к передаче внешних ключей, я хочу проверить больше условий между двумя таблицами. Например, customer_id для случаев и customer_id для case_employees.

1 Ответ

0 голосов
/ 19 марта 2020

Я не уверен, что, как я понял из вашего описания, вы хотите, чтобы все сотрудники для каждого случая указывали подробности сотрудника.

позвоните,

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

Он вернет все случаи с загруженным массивом сотрудников, где каждый сотрудник получит загруженный подробный объект.

...