Попытка создать 5-звездочную рейтинговую систему в Laravel. Звездная скорость - это число с плавающей точкой в диапазоне [от 1 до 5], и оно успешно сохраняется в базе данных. файл миграции для таблицы ставок в базе данных. (Я установил тип данных звездного столбца как число с плавающей запятой)
public function up()
{
Schema::create('rates', function (Blueprint $table) {
$table->id();
$table->morphs('rateble'); //creates rateable_id and rateable_type
$table->foreignId('user_id')->nullable()->constrained()->onUpdate('cascade')->onDelete('set null');
$table->float('star',2, 1); //star number is from 0 to 5
$table->timestamps();
});
}
Затем для усреднения рейтинга для определенного продукта c я использую этот запрос:
public function scopeAverageRate($query, $type, $id)
{
return $query->where('rateble_type', $type)
->where('rateble_id', $id)
->avg('star');
}
Проблема, кажется, что метод avg()
приводит результат к целому числу! Есть ли способ настроить эту функцию для работы с числами с плавающей запятой?
Например, предположим, что для указанного продукта c есть только одна ставка, равная "0,5" звездочек, тогда средний рейтинг вместо этого равен "0". из "0.5"!
Как я могу решить эту проблему?
Заранее спасибо,