Группировать по идентификатору пользователя в отношении модели

У меня есть две модели: отчет и пользователь. Это то, что я имею в моей модели пользователя

public function userReport() {
return $this->hasMany('App\Report', 'user_id','id');
}

И это в модели отчета

public function user() {
return $this->hasOne('App\User', 'id', 'user_id');
}

контроллер

public function details( $item_id ){

$report = Item::find($item_id)->report;
return view('details', compact('report'));
}

Ввиду

{!! $report->user->name !!}

В поле зрения я показываю всех пользователей, которым сообщается об одном элементе. $item_id,

Проблема в том, что если один и тот же пользователь сообщается об одном элементе 1+ раз, я вижу этого пользователя 1+ раз в таблице на странице.

Можно ли как-то сгруппировать по user_id или посчитать user_id и показать User1 ( 4 time reported ) …? Где я должен сгруппировать их?

Обновление: таблица пользователей

id | username | password

таблица отчетов

report_id | id | user_id | date

таблица предметов

id | user_id | category | date_added | image

Update2: Изображение записей в дБ. Здесь пользователь с user_id=3 сообщил item_id=14 Всего в 14 раз. Пользователь с user_id=5 сообщил же item_id=14 всего 3 раза. Так что я должен увидеть на странице user_id=3 ( 14 ) а также user_id=3 ( 3 ), Вместо этого я вижу 17 раз user_id=3, Сильфонные изображения

введите описание изображения здесь

И на странице

введите описание изображения здесь

0

Решение

Там должно быть несколько способов, как решить вашу проблему

Один из способов (ваш контроллер должен выглядеть так)

public function details( $item_id ){
$report = Item::find($item_id)->report->unique('user_id');
return view('details', compact('report'));
}

Второй способ должен быть в использовании @foreach в поле зрения и там проверьте уникальные значения.

Третий способ должен быть в использовании foreach в контроллере и подготовить уникальные данные с вычисленными суммами внутри контроллера, а затем передать эти подготовленные данные для просмотра.

Какую душу вы хотите использовать, это просто вопрос выбора.

Надеюсь, это поможет вам

1

Другие решения

Просто попробуй это. Надеюсь, поможет

Report::where('item.id', $item_id)
->select('item.*','users.*',DB::raw('count(reports.report_id) as total'))
->join('item', 'item.id', '=', 'reports.id')
->join('users', 'users.id', '=', 'reports.user_id')
->groupBy('reports.report_id','reports.id')
->get();
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector