Как правильно вызвать миграцию на работу? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть проект управляющего учреждения.Каждое учебное заведение имеет свою собственную базу данных, например « institu_1 », « institu_2 » и т. Д. Я создаю базу данных этого учреждения и пытаюсь перейти на нее после того, как я ее создал.Поскольку миграция занимает много времени (я думаю, что у нее много таблиц) Я использую очередь и задания.Задание выполняется, но не выполняется миграция !!

* Контроллер: *

$newDb = DB::connection('rc')->statement("CREATE DATABASE intitution_$institutionId CHARACTER SET utf8 COLLATE utf8_general_ci;");
    DB::connection('rc')->statement("GRANT ALL PRIVILEGES ON `institution\\_$institutionId`.* TO 'institutions'@'%' WITH GRANT OPTION");

    if ($newDb) {
      Config::set('database.connections.th', [
        'driver' => 'mysql',
        'host' => 'localhost',
        'port' => '3306',
        'database' => 'institution_'.$institutionId,
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'timezone' => '+00:00',
        'strict' => false,
      ]);
      $job = (new CreateInstitutionDb())->delay(Carbon::now()->addSecond(120));
      dispatch($job);
      return true;
}

* Задание CreateInstitutionDb: *

public function handle()
{
    \Illuminate\Support\Facades\Artisan::call('migrate',['--database' => 'th', '--force' => true]);

}

1 Ответ

0 голосов
/ 27 сентября 2019

Вы задерживаете выполнение задания на 2 минуты, я предполагаю, что вы хотите установить тайм-аут на 2 минуты

$job = new CreateInstitutionDb();

И в вашей работе

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class CreateInstitutionDb implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * The number of seconds the job can run before timing out.
     *
     * @var int
     */
    public $timeout = 120;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Illuminate\Support\Facades\Artisan::call('migrate', ['--database' => 'th', '--force' => true]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...