Laravel, использующий groupBy в с отношениями, не работает должным образом

#php #laravel #eloquent #group-by #laravel-8

#php #laravel #красноречивый #группировка по #laravel-8

Вопрос:

Возможно, это моя ошибка, но я не мог понять, в чем моя ошибка.

У меня есть модель клиента, которая имеет schedule_registers() отношение

 public function schedule_registers()
{
    return $this->hasMany('AppModelsScheduleRegister', 'customer_id', 'id');
}
 

У меня также есть модель ScheduleRegister, которая имеет teacher() отношение

 public function teacher()
{
    return $this->belongsTo('AppModelsUser', 'teacher_id', 'id');
}
 

Я получаю данные в CustomerController следующим образом (я не использую ->get() , потому что отправляю эти данные в datatable);

 $customer_index = Customer::with([
    'company',
    'schedule_registers',
    'schedule_registers.teacher',
]);
 

Этот запрос дает мне такой результат;

https://jsonblob.com/915606370225766400

и когда я пытаюсь использовать group by teacher_id и изменить запрос на этот;

 $customer_index = Customer::with([
    'company',
    'schedule_registers.teacher',
    'schedule_registers' => function ($q) {
        $q->groupBy('schedule_registers.teacher_id');
    },
]);
 

вывод превращается в это;

https://jsonblob.com/915605962518446080

Короче говоря, когда я пытаюсь использовать groupBy, я не получаю никаких ошибок, но получаю неверный вывод. Если бы вы могли проверить выходные данные, когда я использую groupBy, некоторые schedule_registers данные становятся пустыми, а некоторые — нет.

Какой правильный способ использовать groupBy в этой ситуации?

Комментарии:

1. Чего вы надеетесь достичь, добавив groupBy ?

2. @Rwd я пытаюсь добиться того, чтобы schedule_registers были сгруппированы по teacher_id. например, если у меня есть 2 записи в таблице schedule_registers с одинаковым teacher_id, мне нужна только одна из них

3. Вы пытаетесь выполнить groupBy() отдельный запрос. Включение отношений with() методом не объединяет связанные таблицы, а запрашивает их впоследствии. Я бы предложил получить коллекцию с get() помощью, а затем выполнить группировку в коллекции.

4. попробуйте ` -> groupBy([‘schedule_registers.teacher_id’]);`