Поле enum
Метод enum применяется в миграциях Laravel для создания столбца, значения которого ограничены перечислением допустимых вариантов. Первым параметром передаётся имя колонки, вторым - массив допустимых значений. Этот метод полезен для полей с ограниченным набором состояний, таких как статус заказа, роль пользователя или тип публикации.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->enum('column_name', ['value1', 'value2', 'value3']);
});
?>
Пример
Создадим миграцию для таблицы пользователей и добавим поле 'role' с возможными значениями 'admin', 'editor' и 'user':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->enum('role', ['admin', 'editor', 'user']);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
};
?>
Пример
Добавим поле 'status' с возможными значениями 'active', 'inactive' и 'pending' в уже существующую таблицу 'articles':
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->enum('status', ['active', 'inactive', 'pending']);
});
}
public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn('status');
});
}
};
?>
Пример
Создадим модель Article и заполним записи с различными значениями статуса. Запросим только активные статьи:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $fillable = ['title', 'status'];
}
?>
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::where('status', 'active')->get();
foreach ($articles as $article) {
echo $article->title . ' - ' . $article->status;
}
}
}
?>
Результат выполнения кода:
"Article 1 - active"
"Article 2 - active"
"Article 3 - active"
Пример
Используем поле enum для создания записей с определёнными значениями. Создадим новую статью со статусом 'pending':
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function store()
{
$article = new Article();
$article->title = 'New Article';
$article->status = 'pending';
$article->save();
echo 'Article created with status: ' . $article->status;
}
}
?>
Результат выполнения кода:
"Article created with status: pending"
Смотрите также
-
метод
string,
который создаёт строковое поле в таблице -
метод
integer,
который создаёт числовое поле в таблице -
метод
boolean,
который создаёт логическое поле в таблице -
метод
timestamps,
который создаёт поля created_at и updated_at