Класс Schema
Класс Schema предоставляет фасад для работы с схемой базы данных в Laravel. Он позволяет создавать новые таблицы, изменять существующие, удалять таблицы и проверять их наличие. Все методы класса возвращают результат операции или булево значение в случае проверок.
Создание таблицы
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->integer('views')->default(0);
$table->boolean('is_published')->default(false);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
};
?>
Результат выполнения кода:
"Table posts created successfully"
Изменение существующей таблицы
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->text('description')->nullable();
$table->string('category')->nullable();
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn(['description', 'category']);
});
}
};
?>
Результат выполнения кода:
"Table posts updated successfully"
Проверка существования таблицы
Метод hasTable проверяет, существует ли таблица в базе данных:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesSchema;
class TableController extends Controller
{
public function check()
{
$res = Schema::hasTable('posts');
echo $res ? 'Table exists' : 'Table does not exist';
}
}
?>
Результат выполнения кода:
"Table exists"
Проверка существования колонки
Метод hasColumn проверяет наличие указанной колонки в таблице:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesSchema;
class TableController extends Controller
{
public function checkColumn()
{
$res = Schema::hasColumn('posts', 'description');
echo $res ? 'Column exists' : 'Column does not exist';
}
}
?>
Результат выполнения кода:
"Column exists"
Удаление таблицы
Метод drop удаляет указанную таблицу из базы данных:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::drop('posts');
}
public function down()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->timestamps();
});
}
};
?>
Результат выполнения кода:
"Table posts dropped successfully"
Удаление таблицы с проверкой существования
Метод dropIfExists удаляет таблицу только если она существует, что предотвращает ошибки:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::dropIfExists('posts');
}
public function down()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->timestamps();
});
}
};
?>
Результат выполнения кода:
"Table posts dropped successfully if existed"
Переименование таблицы
Метод rename позволяет переименовать существующую таблицу:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up()
{
Schema::rename('posts', 'articles');
}
public function down()
{
Schema::rename('articles', 'posts');
}
};
?>
Результат выполнения кода:
"Table renamed successfully"
Создание таблицы с условием существования
Метод createIfNotExists создаёт таблицу, только если она ещё не существует:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
class TableController extends Controller
{
public function createIfNotExists()
{
if (!Schema::hasTable('articles')) {
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
echo 'Table created';
} else {
echo 'Table already exists';
}
}
}
?>
Результат выполнения кода:
"Table created"