Обычно вы не переносите данные из одной среды в другую. Однако если вам нужно заполнить базу данных данными, есть несколько подходов, которые вы можете использовать, и, похоже, у вас уже есть некоторый опыт их использования.
Сеялка
Обратите внимание, что сеялка работает не так, как миграция, сеялка будет запускаться каждый раз, когда вы вводите команду php artisan db:seed
, что может не совпадать с тем, что вам нужно в процессе развертывания, поскольку это часто приводит к дублированию данных. Его основное использование — повторное заполнение вашей базы данных во время разработки. В этом случае я бы рекомендовал вместо этого использовать миграцию.
Я видел, как многие приложения используют сеялки с условными операторами, чтобы решить, следует ли раздавать данные в зависимости от текущей среды:
class MyTableSeeder extends Seeder
{
if (in_array(config('env'), ['production', 'staging'])) {
// Seed data for production or staging
} elseif (config('env') == 'dev') {
// Seed data only for dev environment
}
// Seed data for ALL environments (Production, staging, dev) etc. You get the picture
}
Я видел, как некоторые создают свои собственные элементы конфигурации и вспомогательные функции, чтобы определить, следует ли переносить данные, вместо того, чтобы просто полагаться на элемент конфигурации env
, поэтому вы вместо этого увидите что-то подобное в сеялке вместо проверки операторов if
значение элемента конфигурации env
:
if (should_seed_data()) {
// Seed data here
}
Это добавляет немного большей гибкости к возможности указывать, следует ли заполнять определенные данные, независимо от env
, на которое в данный момент установлено приложение.
Миграция (рекомендуется)
Если вам нужно заполнить базу данных данными как часть процесса развертывания, например, в вашем случае вы можете развертывать функцию, для работы которой требуется, чтобы таблица данных была заполнена региональными данными, я бы посоветовал вам сделать это как часть процесса миграции:
class YourMigration extends Migration
{
protected $regions = ['East Bay', 'South Bay'];
public function up()
{
// Seed your region data here
foreach ($this->regions as $name) {
Region::create(['name' => $name]);
}
}
}
Самым большим преимуществом использования миграции перед сеялкой является то, что миграция предназначена для запуска только один раз. После миграции Laravel отслеживает уже выполненные миграции и не беспокоится о их повторении, поэтому вам не нужно беспокоиться о том, что данные окажутся там несколько раз. С другой стороны, сидер запускается каждый раз, когда вы запускаете php artisan db:seed
, и обычно это то, что вы не настроили бы для запуска во время развертывания.
В конечном счете, я не думаю, что есть неправильный способ сделать это, и нет общепринятого стандартного подхода к этому, так что на самом деле это зависит от вас.
person
Jonathon
schedule
29.07.2018