У меня есть две модели: отчет и пользователь. Это то, что я имею в моей модели пользователя
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
, Сильфонные изображения
И на странице
Там должно быть несколько способов, как решить вашу проблему
Один из способов (ваш контроллер должен выглядеть так)
public function details( $item_id ){
$report = Item::find($item_id)->report->unique('user_id');
return view('details', compact('report'));
}
Второй способ должен быть в использовании @foreach
в поле зрения и там проверьте уникальные значения.
Третий способ должен быть в использовании foreach
в контроллере и подготовить уникальные данные с вычисленными суммами внутри контроллера, а затем передать эти подготовленные данные для просмотра.
Какую душу вы хотите использовать, это просто вопрос выбора.
Надеюсь, это поможет вам
Просто попробуй это. Надеюсь, поможет
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();