【问题标题】:Group by user id in Model relation在模型关系中按用户 ID 分组
【发布时间】:2017-01-19 07:28:27
【问题描述】:

我有两个模型:报告和用户。这就是我的用户模型中的内容

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。下面是图片

在页面上

【问题讨论】:

  • 一个报表有很多项?
  • 很多项目是的。

标签: php laravel laravel-5


【解决方案1】:

应该有几种方法可以解决您的问题

一种方法是(你的控制器应该看起来像)

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

第二种方法应该是在视图中使用@foreach 并在那里检查唯一值。

第三种方法应该是在控制器中使用foreach,并在控制器内部准备具有计算汇总的唯一数据,然后将准备好的数据传递给查看。

您想使用哪种解决方案只是一个选择问题。

希望对你有帮助

【讨论】:

  • 谢谢Missing argument 1 for Illuminate\Support\Collection::get()
  • 现在又一个错误:Undefined property: Illuminate\Database\Eloquent\Builder::$report
  • 好的,现在就像groupBy 一样,无论该用户有多少条记录,都会向用户显示 1 次。是否可以同时显示该用户的记录计数?
【解决方案2】:

试试这个。希望对你有帮助

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();

【讨论】:

  • 这仅显示一个用户。如果有另一个用户报告了相同的项目,它不会显示它。
  • 您能否发布此模型的数据库结构。以便我可以为您提供更多帮助
  • 表格报告中可以有多个时间相同的user_id 到相同的id 所以当我加载id(=1) 并且如果有3 次user_id(=1) 我想显示一次但计算前: user_1 ( 3 )
  • 您想显示特定用户和项目的最后报告时间吗?
  • SQLSTATE[42S22]: Column not found: 1054 Unknown column 'item_id' in 'where clause' (SQL: select * from items where item_id = 14 group by reports.user_id order by COUNT(user_id) asc)
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多