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), находясь в спящем ряду (после создания таблиц), я видел, чтотаблиц еще не существует. Похоже, что все команды БД сбрасываются после завершения функции (или соединения БД?), Поэтому я вижу таблицы только после завершения миграции.
Я хочу объединить другие элементы в команде миграции, но яне могу, если данные не восстановлены. Есть ли у вас какие-либо идеи, как немедленно сбросить команды БД, или каким-то другим способом решить проблему? Большое спасибо!