Размер файла: 2.5Kb
<?php
declare(strict_types=1);
use App\Models\Down;
use App\Models\Polling;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
final class RemoveRatedFromDowns extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
$downs = Down::query()->get();
foreach ($downs as $down) {
$newRating = 0;
$avgRating = $down->rated ? $down->rating / $down->rated : 0;
if ($avgRating >= 4) {
$newRating = $down->rated; // 100 проц лайков
}
if ($avgRating >= 3.5 && $avgRating < 4) {
$newRating = $down->rated - round($down->rated / 100 * 25); // 75 проц лайков
}
if ($avgRating >= 3 && $avgRating < 3.5) {
$newRating = round($down->rated / 2); // 50 проц лайков
}
if ($avgRating >= 2.5 && $avgRating < 3) {
$newRating = round($down->rated - round($down->rated / 100 * 75)); // 25 проц лайков
}
if ($avgRating >= 2 && $avgRating < 2.5) {
$newRating = -round($down->rated / 2); // 50 проц дизлайков
}
if ($avgRating >= 1.5 && $avgRating < 2) {
$newRating = -round($down->rated - round($down->rated / 100 * 25)); // 75 проц дизлайков
}
if ($avgRating < 1.5) {
$newRating = -$down->rated; // 100 проц дизлайков
}
if ($down->rated === 0) {
$newRating = 0;
}
Down::query()
->where('id', $down->id)
->update(['rating' => $newRating]);
}
Polling::query()
->where('relate_type', Down::$morphName)
->whereIn('vote', [3, 4, 5])
->update(['vote' => '+']);
Polling::query()
->where('relate_type', Down::$morphName)
->whereIn('vote', [1, 2])
->update(['vote' => '-']);
Schema::table('downs', function (Blueprint $table) {
$table->dropColumn('rated');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::table('downs', function (Blueprint $table) {
$table->integer('rated')->default(0)->after('rating');
});
}
}