如何计算一个laravel帖子的评分

9jyewag0  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(125)

我需要计算服务器评级。我有表server_user_likes,其中存储了server_iduser_id,用户的服务器赞也存储在其中。1个赞= ServerUserLike中的1行。使用server_iduser_id

  1. Schema::create('server_user_likes', function (Blueprint $table) {
  2. $table->engine = 'InnoDB';
  3. $table->id();
  4. $table->unsignedBigInteger('server_id');
  5. $table->string('user_id');
  6. $table->index('server_id', 'server_user_likes_server_idx');
  7. $table->foreign('server_id', 'server_user_likes_server_fk')->on('servers')->references('id');
  8. $table->timestamps();
  9. });

型号服务器用户类

  1. public function server()
  2. {
  3. return $this->hasMany(Server::class);
  4. }

我数了一下服务器点赞的数量

  1. $ratingCounts = DB::table('server_user_likes')
  2. ->where('server_id', $server->id)
  3. ->count();

我统计了所有服务器的点赞总数

  1. $allRatingCounts = DB::table('server_user_likes')
  2. ->count();

现在我需要计算服务器的评级,所谓的前10名减法将不会有帮助,因为服务器和用户可以增加每一次
p.s服务器与Post相同。

k3bvogb1

k3bvogb11#

我建议使用这个查询来获得前10名的服务器/职位的基础上喜欢。

  1. // here I use eloquent with model ServerUserLike
  2. $results = ServerUserLike::query()
  3. ->select('server_id')
  4. ->selectRaw('COUNT(*) AS likes_count')
  5. ->groupBy('server_id')
  6. ->orderByDesc('likes_count')
  7. ->take(10)
  8. ->get();

结果将是前10个服务器的列表[server_id,likes_count]
根据要求,这是一个示例,您可以在top_server.blade.php中显示前10名

  1. @foreach ($results as $topServer)
  2. <tr>
  3. <td>{{ $loop->iteration }}</td>
  4. <td>{{ $topServer->server_id }}</td>
  5. <td>{{ $topServer->likes_count }}</td>
  6. </tr>
  7. @endforeach

$loop->iteration将显示从1到10的数字。
https://tutsforweb.com/loop-variable-foreach-blade-laravel/

展开查看全部

相关问题