как получить записи списка через массив идентификаторов Laravel - PullRequest
0 голосов
/ 17 ноября 2018

В настоящее время у меня есть две таблицы, типичная основная - подробная информация, которую я получаю, это массив идентификаторов из подробной таблицы [1,2,3,4,5, ...], из которой я хочу создать группировка для получения деталей, сгруппированных по мастеру

Master

public function details()
{
    return $this->hasMany('App\Models\Detail', 'detail_id');
}

Деталь

public function master()
{
    return $this->belongsTo('App\Models\Master', 'master_id');
}

Идентификатор [1,2,3,4,5..]

моя попытка получить результат, но они не сгруппированы

return Detail::whereIn('id', $array)->with(['master' => function($query){
        $query->groupBy('name');
    }])->get();

Мой вопрос, это не дубликат, поэтому этот вопрос состоит в том, чтобы получить идентификаторы, которые у нас уже есть, что я хочу, это группа . Неправильно закрывать;)

1 Ответ

0 голосов
/ 18 ноября 2018

Таким образом, я не верю, что Eloquent поддерживает groupBy (вам придется написать собственный запрос);и вы не группируете все столбцы.

Ваш запрос не изменяет выбранные столбцы, поэтому laravel будет , выбирая все из них ;и что-то уникальное, например, ваши идентификаторы будет разбивать группы.Вам либо нужно четко указать, что вы выбираете для включения групп, либо явно указать, как суммировать другие столбцы.

Все примеры в документах показывают настроенные запросы выбора,за исключением тех, которые конкретно указаны под заголовком «groupBy / Have», что, вероятно, является ошибкой документов.

Но обратите внимание на другие примеры, например, на этот, которые применяют функции группировки ко всем выбранным столбцам:

$users = DB::table('users')
             // count is a grouping function; status is grouped below
             ->select(DB::raw('count(*) as user_count, status'))
             ->where('status', '<>', 1)
             ->groupBy('status')
             ->get();

Группировка - это то, что вы действительно хотите?Группировка суммирует таблицу, например, по предоставленным итоговым значениям, или количествам, или уникальным «именам».Если это так, вам нужно будет изменить запрос вручную, как в примере выше.

Если вы просто хотите упорядочить их по «имени» (т.е. сгруппировать их вместе), то вам нужен orderBy функция.В этом случае вы измените свой код следующим образом:

return Detail::whereIn('id', $array)
    ->with('master')
    ->groupBy('name')
    ->get();

Хотя я не думаю, что это имеет здесь значение, вы можете подумать, является ли name уникальным именем столбца междуосновные и подробные таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...