php - 在 Laravel 中创建星级百分比

标签 php laravel laravel-4 eloquent percentage

我正在创建一个应用程序,买家可以在其中根据项目对他们的供应商进行评分,他们以“满分五分”(星号)为基础对他们进行评分,但是在供应商资料中我想将此数据显示为正常百分比。我已经让它与下面的代码一起工作,但我想知道是否有更简洁的方法来执行此操作,因为我似乎必须将这段代码复制 5 次(或为它创建一个函数)但我希望 Laravel可能有更好的方法。

public function getSupplierProfile($group_id) {
    $group = Group::findOrFail($group_id);

    $data = new stdClass;

    $data->quality = new stdClass;
    $data->quality->query = SupplierRating::where('supplier_id', '=', $group->id);
    $data->quality->count = $data->quality->query->count();
    $data->quality->star_avg = $data->quality->query->avg('quality');
    $data->quality->avg = $data->quality->star_avg / ($data->quality->count * 6) * 100;

    dd($data->quality->avg); // debug

    return View::make('groups.view_profile', array('group' => $group));
}

最佳答案

好的,所以您有一个基于星级的评级系统(最高 5 星)。我将在下面做出一些假设/建议。

我假设您有一个评分表,实际上只为每个评分存储一行,如果没有,我建议您设置一个。

<?php
class Rating extends \Eloquent
{

    protected $fillable = ['profile_id', 'user_id', 'rating'];

    public function user()
    {
        return $this->belongsTo('User', 'user_id');
    }

    public function profile()
    {
        return $this->belongsTo('Profile', 'profile_id');
    }

}

此表将作为跟踪评级的好方法,此外,如果您在 Controller 中添加时间戳和一些逻辑,它还允许您限制评级。

这里有几个选项,如下所示。

  1. 在配置文件中有一列包含当前评级,并在添加新评级时更新。
  2. 有一个包含评级的汇总表,并在添加新评级时更新。
  3. 动态计算。

计算选项 1 评级的方法与选项 3 相同,只是您只在添加新评级后才运行它。采用以下伪代码。

rating = score / ((total_ratings * 5) / 100)

在此示例中,score 是所有评分的总和,total_ratings 是评分的计数。

与其将代码放在 Controller 中,不如将其抽象为模型中的 Laravel 修改器,动态值如下所示:

public function getRating()
{
    return Profile::join('ratings', 'ratings.profile_id', '=', 'profile.id')
        ->where('profile.id', $this->attributes['id'])
        ->select(DB::raw('SUM(ratings.rating) / ((COUNT(ratings.* * 5) / 100) as rating'))->pluck('rating');
}

现在,当访问您的个人资料/供应商模型时,您可以像访问任何其他列一样访问评分属性。

如果您想要存储它,您可以使用相同类型的方法在 Controller 中进行处理。最终你不局限于任何特定的方法,我提到的不止三种,但这些是基本方法。

希望对您有所帮助。

关于php - 在 Laravel 中创建星级百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383650/

相关文章:

php - Laravel 更改区域设置不起作用

laravel - Vue 3,Uncaught TypeError : Vue. use is not a function

Laravel Controller 子文件夹路由

php - Laravel 4.2 软删除不起作用

php - Wordpress 中的子菜单下拉

php - 是否有一种干净的 HTML 方式将按键与下拉项相关联

php - 我想更改 MySQL 数据库上的排序规则

用于解析 mysql 创建查询并与现有表进行区分的 PHP 库

php - "message": "Undefined property: $response", 带有 laravel 5.2 的 dingo api

php - 在 Homestead VM 上添加和使用额外的数据库