Поле decimal
Метод decimal применяется в миграциях Laravel для создания колонки типа DECIMAL в базе данных. Первым параметром передаётся имя колонки, вторым - общее количество цифр, третьим - количество цифр после запятой. Метод позволяет хранить точные дробные числа, например, денежные суммы, без потери точности.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->decimal('column_name', $totalDigits, $decimalPlaces);
});
?>
Пример
Давайте создадим таблицу продуктов с полем для цены:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price', 10, 2);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('products');
}
};
?>
Результат выполнения кода:
"Table products created successfully"
Пример
Давайте добавим поле для скидки с возможностью хранения трёх знаков после запятой:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('products', function (Blueprint $table) {
$table->decimal('discount', 5, 3)->nullable();
});
}
public function down(): void
{
Schema::table('products', function (Blueprint $table) {
$table->dropColumn('discount');
});
}
};
?>
Результат выполнения кода:
"Column discount added successfully"
Пример
Давайте создадим таблицу заказов с полями для денежных сумм:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->decimal('total', 12, 2);
$table->decimal('tax', 8, 2);
$table->decimal('shipping_cost', 8, 2);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('orders');
}
};
?>
Результат выполнения кода:
"Table orders created successfully with decimal columns"