Миграция Laravel внутри пользовательской папки - PullRequest
0 голосов
/ 08 октября 2019

У меня есть 5.7 Laravel App, который я только что переключил с MAMP на Docker.

Службы / контейнеры:

- app
- cache
- db //serve as transaction database
- dblog //serve as log database

Все работает, когда я импортирую данные из локальной базы данных вбаза данных внутри тома БД. Вызов API работает, поэтому выборка и запись данных в базу данных в порядке.

У меня возникли некоторые проблемы при выполнении миграции из пользовательской папки внутри app\database migrations\logs:

  • Возможность удаления и создания схемы (Это означает, что соединение в порядке, круто, круто!)
  • Невозможно запустить миграцию внутри папки журнала (Это проблема)
  • Это выборкамиграции по умолчанию (внутри поставщика) вместо использования миграций внутри папки журнала, например, для опубликованной миграции телескопа. (Это проблема)
  • Если я перенесу миграцию из папки журнала за пределы, это все равно выдаст мне эту ошибку ниже.
  • Я также обновил соединение миграции внутри поставщика просто для проверкивсе еще вызывает ту же проблему

Это ошибка, которую я получаю при выполнении команды.

SQLSTATE [3D000]: неверное имя каталога: 1046 База данных не выбрана(SQL: создать таблицу telescope_entries (sequence bigint без знака, не ноль, первичный ключ auto_increment, uuid char (36), не ноль, batch_id char (36), не ноль, family_hash varchar (191) ноль, should_display_on_index tinyint (1) не равно NULL по умолчанию '1', type varchar (20) не равно NULL, content longtext не равно NULL, created_at datetime null) набор символов по умолчанию utf8mb4 collate 'utf8mb4_unicode_ci')

Ниже приведена структура приложения для миграции:

|app
|database
   |migrations
       |logs
           2018_08_08_100000_create_telescope_entries_table.php
           2019_06_20_063329_create_push_notification_logs_table.php
       2014_10_12_000000_create_users_table.php
//truncated

Это App\Providers\AppServiceProvider, я добавил setMigrationFolderPath, чтобы я мог поместить logs миграции в их собственную папку

public function boot()
{
    //truncated
    $this->setMigrationFolderPath();
}

private function setMigrationFolderPath()
{
    //this works if I do dd('set here');
    $migrationPath = database_path('migrations');
    $directories = glob($migrationPath . '/*' , GLOB_ONLYDIR);
    $paths = array_merge([$migrationPath], $directories);

    $this->loadMigrationsFrom($paths);
}

Это App\database\migrations\logs\CreateTelescopeEntriesTable.php

class CreateTelescopeEntriesTable extends Migration
{
    protected $schema;

    public function __construct()
    {
        $this->schema = Schema::connection('log');
    }

    public function up()
    {
        $this->schema->create('telescope_entries', function (Blueprint $table) {
            $table->bigIncrements('sequence');
            $table->uuid('uuid');
            $table->uuid('batch_id');
            $table->string('family_hash')->nullable()->index();
            $table->boolean('should_display_on_index')->default(true);
            $table->string('type', 20);
            $table->longText('content');
            $table->dateTime('created_at')->nullable();

            $table->unique('uuid');
            $table->index('batch_id');
            $table->index(['type', 'should_display_on_index']);
        });

        //truncated
    }

    public function down()
    {
        $this->schema->dropIfExists('telescope_entries_tags');
        $this->schema->dropIfExists('telescope_entries');
        $this->schema->dropIfExists('telescope_monitoring');
    }
}

Это App\config\database.php

//i have 2 connections here
'main' => [
    //truncated because it is irrelevant
],
'log' => [
    'driver' => 'mysql',
    'host' => env('DB_LOG_HOST', '127.0.0.1'),
    'port' => env('DB_LOG_PORT', '3306'),
    'database' => env('DB_LOG_DATABASE', 'forge'),
    'username' => env('DB_LOG_USERNAME', 'forge'),
    'password' => env('DB_LOG_PASSWORD', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
],
//truncated

Это .env

DB_CONNECTION=main
DB_HOST=db
DB_PORT=3306
DB_DATABASE=self_service_db
DB_USERNAME=root
DB_PASSWORD=secret
DB_ROOT_PASSWORD=secret

//this is the DB CONNECTION it is using
DB_LOG_CONNECTION=log
DB_LOG_HOST=dblog
DB_LOG_PORT=3306
DB_LOG_DATABASE=log_db
DB_LOG_USERNAME=root
DB_LOG_PASSWORD=secret
DB_LOG_ROOT_PASSWORD=secret

Я хотел бы сохранить текущие настройки (папка миграции журнала) и запустить миграцию в этой папке в log соединение, что мне делать?

...