Метод rename
Метод rename класса Schema применяется для изменения имени существующей таблицы в базе данных.
Первым параметром передаётся текущее имя таблицы, вторым - новое имя.
Метод возвращает результат выполнения операции в виде булева значения.
Важно помнить, что переименование таблицы может повлиять на связанные внешние ключи и индексы,
поэтому следует быть осторожным при работе с таблицами, имеющими связи.
Синтаксис
<?php
Schema::rename($from, $to);
?>
Пример
Давайте переименуем таблицу 'old_posts' в 'posts':
<?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::rename('old_posts', 'posts');
}
public function down()
{
Schema::rename('posts', 'old_posts');
}
};
?>
Пример
Переименуем таблицу 'users_data' в 'user_profiles'
с проверкой существования таблицы:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
if (Schema::hasTable('users_data')) {
Schema::rename('users_data', 'user_profiles');
}
}
public function down()
{
if (Schema::hasTable('user_profiles')) {
Schema::rename('user_profiles', 'users_data');
}
}
};
?>
Пример
Переименуем таблицу, используя метод внутри контроллера для динамического изменения структуры:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Schema;
use Illuminate\Http\Request;
class TableController extends Controller
{
public function renameTable(Request $request)
{
$oldName = $request->input('old_name');
$newName = $request->input('new_name');
if (Schema::hasTable($oldName) && !Schema::hasTable($newName)) {
$res = Schema::rename($oldName, $newName);
if ($res) {
echo "Table renamed successfully";
} else {
echo "Failed to rename table";
}
} else {
echo "Table does not exist or new name is already taken";
}
}
}
?>
Пример
Выполним переименование таблицы с обработкой возможных ошибок при помощи try-catch:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\QueryException;
class RenameTableCommand extends Command
{
protected $signature = 'table:rename {old} {new}';
protected $description = 'Rename a database table';
public function handle()
{
$old = $this->argument('old');
$new = $this->argument('new');
try {
if (Schema::hasTable($old)) {
Schema::rename($old, $new);
$this->info("Table '{$old}' renamed to '{$new}' successfully");
} else {
$this->error("Table '{$old}' does not exist");
}
} catch (QueryException $e) {
$this->error("Error renaming table: " . $e->getMessage());
}
}
}
?>