Я обнаружил, что использование команды Artisan::call()
для миграции, а затем снова для заполнения приводит к правильной миграции, но база данных никогда не заполняется. Это может быть ошибка или, возможно, есть способ очистить предыдущую команду.
Например:
Artisan::call('migrate', [
'--database' => 'tenant',
'--path' => 'database/tenantMigrations',
'--force' => true,
]);
А потом:
Artisan::call('db:seed', [
'--database' => 'tenant',
'--class' => 'TenantSeeder',
]);
Как видите, я запускаю эти команды на только что созданной клиентской БД, чтобы "подготовить" ее. Каждая из этих команд работает отдельно, но не вместе.
Я попытался найти дополнительную документацию по объединению этих двух команд, но не смог указать класс сеялки. Это может выглядеть примерно так:
Artisan::call('migrate', [
'--database' => 'tenant',
'--path' => 'database/tenantMigrations',
'--force' => true,
'--seed' => true,
'--class' => 'TenantSeeder', // this is the only one I can't do, which is critical
]);
Я также попытался запустить сеялку, как:
(new \TenantSeeder)->run();
Я получаю ошибку: Call to a member function line() on null
.
Интересно также отметить, что все работает правильно в моей локальной среде Homestead, но не на сервере Digital Ocean, управляемом Forge.
Редактировать
Мое текущее решение состоит в том, чтобы поместить мою логику сеялки в обычные классы (которые не расширяют базовый класс сеялок) и вызывать их, как я показал выше.