При выполнении миграции laravel я сталкиваюсь с небольшим неудобством. Я использую Ларавель 5.1.
Поскольку существует много таблиц со многими отношениями, вероятно, невозможно переименовать файлы миграции, чтобы они выполнялись в правильном порядке, чтобы не нарушались ограничения внешнего ключа. Это было то, что я сделал однажды в прошлом, и это было очень непрактично.
Сейчас я определяю каждую миграцию следующим образом:
class CreateSomeTable extends Migration
{
public function up()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
// my table definitions go here
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
public function down()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
// drop table
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
}
Проблема в том, что это утомительно писать и загромождает код.
Я также подумал о создании двух фиктивных файлов миграции, единственной целью которых было бы включение и отключение проверки внешнего ключа, и я бы назвал их таким образом, чтобы они запускались в начале и в конце каждой миграции.
Если есть элегантное решение, возможно ли применить его и к процессу заполнения, поскольку это тоже проблема.
Это, очевидно, очень импровизированное решение, и я спрашиваю, есть ли лучший способ сделать это. Есть ли какие-то методы beforeMigrate
и afterMigrate
, которые я могу переопределить, или что-то в этом роде?
А если нет, то как вы собираетесь это делать?
Буду признателен за любые идеи, мне не нравятся все варианты, которые я изложил.