Laravel (6.0.3) не сбрасывает команды DB :: Statement? - PullRequest
0 голосов
/ 17 октября 2019

Laravel (6.0.3): в моей задаче миграции я хочу вручную (с настраиваемым sql) создавать таблицы и выполнять команду консоли восстановления, поэтому я создал файл database/migrations/today_date_create_my_custom_tables.php с функцией up ():

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\QueryException;

class CreateMyTables extends Migration
{
    public function up()
    {
        // ...
        try {
            \Log::info('create tables...');
            $result = DB::statement($a_lot_of_sql_commands_creating_tables_read_from_file);
            \Log::info('DB::statement executed... but...');
            \Log::info('also if I wait seconds...');
            sleep(3);
            \Log::info('try to call my working custom console command "pg_restore"...');
            $exitCode = Artisan::call('db:restore'); // it call pg_restore server command
            \Log::info('...give error: tables aren\'t created yet.');
            // here I need to do a lot of other stuff (create foreign keys, ecc..),
            // but data must be restored.
        }
        catch (QueryException $e) {
            //...
        }
    }
}

Я использую postgresql. Моя пользовательская консольная команда db: restore works. Мои данные представлены в двоичном формате, поэтому только pg_restore может вернуть их обратно.

Если я проверяю db (например, с pgAdmin), находясь в спящем ряду (после создания таблиц), я видел, чтотаблиц еще не существует. Похоже, что все команды БД сбрасываются после завершения функции (или соединения БД?), Поэтому я вижу таблицы только после завершения миграции.

Я хочу объединить другие элементы в команде миграции, но яне могу, если данные не восстановлены. Есть ли у вас какие-либо идеи, как немедленно сбросить команды БД, или каким-то другим способом решить проблему? Большое спасибо!

...