0

Schema Builder: Создание таблицы, если она не существует

16

Я использую следующий код в Schema Builder для создания таблицы:

Schema::create('tblCategory', function (Blueprint $table) {
    $table->increments('CategoryID');
    $table->string('Category', 40);
    $table->unique('Category', 'tblCategory_UK_Category');
    $table->timestamps();
});

Проблема в том, что если я пытаюсь создать новую таблицу, все старые скрипты выполняются и возникает ошибка, что таблица уже существует.

Есть ли способ создать таблицу, только если она не существует, используя Schema Builder?

2 ответ(ов)

1

Если вы хотите создать таблицу в Laravel только в том случае, если она не существует, вы можете использовать следующий пример кода:

use Illuminate\Support\Facades\Schema;

if (!Schema::hasTable('tblCategory')) {
     Schema::create('tblCategory', function($table) {
            $table->engine = 'InnoDB';
            $table->increments('CategoryID');
            $table->string('Category', 40);
            $table->unique('Category', 'tblCategory_UK_Category');
            $table->timestamps();
    });
}

В этом фрагменте кода мы сначала проверяем, существует ли таблица tblCategory, с помощью метода hasTable(). Если таблица не существует, мы создаем ее с помощью метода create(), где определяем необходимые столбцы и их свойства. В данном случае мы используем increments для первичного ключа, создаем строковое поле для категории и устанавливаем уникальность для этого поля. Не забудьте настроить различные параметры таблицы, такие как движок (в данном случае InnoDB), и добавить временные метки с помощью метода timestamps().

0

Вам нужно использовать транзакцию для выполнения операций с базой данных. В приведённом примере используется функция DB::transaction, которая автоматически откатит транзакцию, если внутри замыкания произойдет исключение. Это значит, что если вы попытаетесь создать таблицу, которая уже существует, будет выдана ошибка.

Вот пример кода:

DB::transaction(function () {
    // Здесь создайте вашу таблицу с помощью билдера схемы.
});

Таким образом, большинство транзакций в Laravel должны содержать подобное замыкание. Это позволит вам обеспечить целостность данных и избежать частично выполненных операций.

Дополнительную информацию можно найти в официальной документации Laravel: Laravel Documentation.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь