Поле double
Метод double используется для создания столбца с типом данных DOUBLE в базе данных. Этот тип предназначен для хранения чисел с плавающей точкой двойной точности, что позволяет хранить очень большие или очень маленькие значения с высокой точностью. Первым параметром передаётся имя колонки, вторым параметром можно указать длину и количество знаков после запятой в формате 'общая_длина, знаки_после_запятой'. Если параметры не указаны, используются значения по умолчанию для конкретной СУБД.
Синтаксис
<?php
Schema::create('table_name', function (Blueprint $table) {
$table->double('column_name', $total, $places);
});
?>
Пример
Давайте создадим таблицу products с полем price типа double:
<?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->double('price', 10, 2);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('products');
}
};
?>
В этом примере поле price будет хранить числа с общим количеством цифр 10, из которых 2 знака после запятой.
Пример
Давайте создадим таблицу measurements с полем value типа double без указания точности:
<?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('measurements', function (Blueprint $table) {
$table->id();
$table->string('parameter');
$table->double('value');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('measurements');
}
};
?>
В этом случае поле value будет использовать стандартную точность, установленную в СУБД.
Пример
Давайте создадим модель и вставим данные с полем double:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = ['name', 'price'];
}
?>
<?php
use App\Models\Product;
use Illuminate\Support\Facades\Route;
Route::get('/test', function () {
$product = Product::create([
'name' => 'Laptop',
'price' => 999.99
]);
echo $product->name . ': ' . $product->price;
});
?>
Результат выполнения кода:
"Laptop: 999.99"
Пример
Давайте рассмотрим пример с математическими операциями над полем double:
<?php
use App\Models\Product;
use Illuminate\Support\Facades\Route;
Route::get('/calc', function () {
$product = Product::find(1);
$priceWithTax = $product->price * 1.2;
echo $product->name . ' price with tax: ' . $priceWithTax;
});
?>
Результат выполнения кода:
"Laptop price with tax: 1199.988"
Обратите внимание, что при умножении чисел с плавающей точкой могут возникать погрешности.