Как создать мастер-класс миграции, который бы вызывал все ваши классы миграции? - PullRequest
0 голосов
/ 08 февраля 2019

В Laravel важен порядок, в котором вы создаете миграцию и сеялки.

Когда они запускаются в кустарном режиме, если в классе (таблице) есть какие-то внешние ключи, и один из них выполняется дотот, на который ссылаются, выполнение остановится, и вы получите ошибку.

Существует класс с именем DatabaseSeeder, который запускается при вызове php artisan db:seed.Этот класс включает в себя все ваши классы сеялки.https://laravel.com/docs/5.7/seeding#writing-seeders

Есть ли эквивалент для миграции?

<?php

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call([
            LanguageTableDataSeeder::class,
            UserTableDataSeeder::class,
            PlaceTableDataSeeder::class]);
    }
}

1 Ответ

0 голосов
/ 08 февраля 2019

да, вы можете сделать это

Но это не рекомендуется

Шаг 1: Запустите команду php artisan make:migration create_bulk_table

Теперь откройте миграциюпапка внутри database/migrations вы найдете новую миграцию time_stamp_create_bulk_table.php

откройте ее вы найдете содержимое, как это

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBulkTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('bulk', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('bulk');
    }
}

Как это сделать

Тамдва метода в этом

один для creating the table, то есть up METHOD

и

, другой для dropping the table, то естьdown METHOD

Например, если вы хотите перенести

posts таблица, tasks таблица, products таблица

в одноместномМиграция

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBulkTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {

        if (!Schema::hasTable('posts')) 
        {

            Schema::create('posts', function (Blueprint $table) {
                $table->increments('id');
                $table->string('post_name');
                $table->text('post_desc');
                $table->timestamps();
            });
        }


        if (!Schema::hasTable('tasks')) 
        {

            Schema::create('tasks', function (Blueprint $table) {
                $table->increments('id');
                $table->string('task_name');
                $table->enum('task_status', ['Open', 'Closed','Inactive']);
                $table->text('task_desc');
                $table->timestamps();
            });
        }


        if (!Schema::hasTable('products')) 
        {

            Schema::create('products', function (Blueprint $table) {
                $table->increments('id');
                $table->string('product_name');
                $table->text('product_desc');
                $table->string('product_price');
                $table->timestamps();
            });


        }


    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
        Schema::dropIfExists('tasks');
        Schema::dropIfExists('products');

    }
}

BE CAREFUL WHILE REFERING THE FORIEGN KEY OF PARENT TABLE WHICK NEEDS TO BE CREATED BEFORE THE REFERAL

Например У вас есть столбец user_id в таблице сообщений, который вы называете как

 $table->foreign('user_id')->references('id')->on('users');

users таблица должна быть перенесена до posts таблицы

Надеюсь, что все ясно

Пожалуйста, прокомментируйте ниже, если вы обнаружите какие-либо ошибки

...