Метод nullable
Метод nullable применяется к определению колонки при создании или изменении таблицы в миграциях Laravel. Он указывает, что колонка может хранить значение NULL. По умолчанию все колонки в Laravel являются nullable, если только не задано значение по умолчанию, но явное использование метода делает код более читаемым. Также метод часто используется в цепочке с другими методами для отмены ограничения NOT NULL при изменении существующих колонок.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->string('column_name')->nullable();
});
?>
Пример
Давайте создадим таблицу пользователей с полем 'phone', которое может быть NULL:
<?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('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('phone')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
};
?>
В результате выполнения миграции будет создана таблица 'users', где колонка 'phone' может содержать значение NULL.
Пример
Давайте изменим существующую таблицу, сделав колонку 'description' nullable:
<?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->text('description')->nullable()->change();
});
}
public function down(): void
{
Schema::table('products', function (Blueprint $table) {
$table->text('description')->nullable(false)->change();
});
}
};
?>
Этот код изменит колонку 'description', разрешив ей принимать NULL значения.
Пример
Давайте создадим таблицу статей с несколькими nullable полями разных типов:
<?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('articles', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->integer('views')->nullable()->default(0);
$table->boolean('is_published')->nullable();
$table->timestamp('published_at')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('articles');
}
};
?>
Здесь колонки 'views', 'is_published' и 'published_at' могут принимать NULL, при этом для 'views' установлено значение по умолчанию 0.
Пример
Давайте используем метод nullable вместе с методом default для более гибкого определения колонки:
<?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('comments', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->nullable()->constrained()->onDelete('set null');
$table->text('message');
$table->string('status')->nullable()->default('pending');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('comments');
}
};
?>
В этом примере колонка 'user_id' может быть NULL и при удалении пользователя устанавливается в NULL, а колонка 'status' имеет значение по умолчанию 'pending', но может быть NULL.
Смотрите также
-
метод
default,
который устанавливает значение по умолчанию для колонки -
метод
index,
который создает индекс для колонки -
метод
unique,
который делает значения в колонке уникальными -
метод
constrained,
который добавляет ограничение внешнего ключа