Laravel 5 – Как автоматически заполнить таблицу после развертывания приложения?

У меня есть определенные данные, которые должны быть в таблице, чтобы мое приложение работало, иначе я получаю сообщение об ошибке.

Например, если ВЫ или кто-то еще вытащите мое приложение из github и если вы запустите php artisan migrate, а затем попытаетесь протестировать приложение, вы получите сообщение об ошибке: данные не существуют или что-то в этом роде. и это потому, что в таблице нет данных.

Таким образом, идеальным решением будет после запуска:

 php artisan migrate

что вы также получите эти необходимые данные в этой таблице.

Это должно быть сделано как-то с сеялкой, но я не знаю, как. Может ли кто-нибудь помочь и привести пример?

Как создать начальное значение для этих данных, которые должны попасть в таблицу car_company:

идентификатор car_company

1 Фольксваген

2 Мерседес

3 Ауди

4 Порше

есть 4 строки, и я хочу вставить их после запуска

 php artisan db:seed

person lewis4u    schedule 27.08.2016    source источник
comment
Я использовал приложения PHP, в которых есть это, и это хорошо. Я планировал написать сценарий, который делает это сам. я бы сделал это просто добавив проверку на этапе инициализации приложения. Вы можете проверить, с каким номером миграции находится исходный код, а затем запросить таблицу отслеживания миграции в БД, если БД находится за кодовой базой, вы можете остановить выполнение приложения и просто распечатать сообщение - вам нужно выполнить миграцию   -  person the_velour_fog    schedule 27.08.2016
comment
да, я просто хочу сделать это семя после запуска миграции в самый первый раз, поэтому в таблице есть эти данные, чтобы приложение было полностью функциональным!   -  person lewis4u    schedule 27.08.2016
comment
хорошо, я думаю, что проблема больше в обнаружении и отображении сообщения. его просто создать псевдоним оболочки или что-то, что просто будет выполнять обе команды, но тогда вам нужно обучить людей тому, что им нужно изучить, найти и использовать ваш новый скрипт/команду. Но люди уже знают, что вы не можете использовать БД, если она не заполнена. а команда ремесленника сеять уже общеизвестна. Другая проблема заключается в том, что когда вы автоматизируете что-то вроде заполнения, вы теряете контроль над тем, когда происходит заполнение, поэтому БД может быть заполнена, когда вы этого не хотите.   -  person the_velour_fog    schedule 27.08.2016
comment
Вот почему я думаю, что либо остановить выполнение приложения, либо напечатать сообщение разработчику о том, что БД не обновляется должным образом, и, возможно, дать параметр конфигурации, который позволит им переопределить сообщение и принудительно использовать устаревшую БД, если они хотят игнорировать сообщения. или, возможно, распечатать в файл журнала. их проблема в том, будет ли просматриваться файл журнала или нет.   -  person the_velour_fog    schedule 27.08.2016
comment
да, но вы слишком углубляетесь в настройку, я вижу эту проблему в том, что вы не можете использовать приложение, если у вас нет данных в таблице, поэтому для решения этой проблемы пользователю просто нужно запустить 2 команды: 1. php artisan миграция, которая является нормальной вещью, и все это знают, и 2. php artisan db:seed, и я не знаю, как создать начальное число для 10 новых вставок в мою таблицу. это проблема здесь, ничего больше.   -  person lewis4u    schedule 27.08.2016


Ответы (3)


Сначала запустите следующую команду:

php artisan make:seeder CarCompanyTableSeeder. Это создаст класс CarCompanyTableSeeder в database\seeds.

введите описание изображения здесь

Внутри функции public function run() добавьте следующие коды:

public function run()
    {
        $data = array(
            array(
                'id'            =>    1,
                'car_company'   =>   'Volkswagen'
            ),
            array(
                'id'            =>    2,
                'car_company'   =>   'Mercedes'
            ),
            array(
                'id'            =>    3,
                'car_company'   =>   'Audi'
            ),
            array(
                'id'            =>    4,
                'car_company'   =>   'Porsche'
            )
        );

        DB::table('car_company')->insert($data);
    }

Существует еще один класс класс DatabaseSeeder, расширяющий Seeder в database\seeds. Внутри класса есть функция run(). Добавьте туда следующий код:

public function run()
    {
        Model::unguard();

        $this->call(CarCompanyTableSeeder::class);

        Model::reguard();
    }

Теперь, когда вы запустите php artisan db:seed, нужные вам значения будут вставлены туда.

person Rumel    schedule 27.08.2016
comment
@Rumel Это пример того, как должны выглядеть все ответы! - person lewis4u; 27.08.2016
comment
Спасибо @lewis4u. Я очень рад, что мой ответ помог вам. :) - person Rumel; 27.08.2016
comment
Без обид (@Marcin Nabiałek и @Ray Cheng), вы, вероятно, более опытны, и, возможно, для вас это тривиальная вещь, и, возможно, у вас нет времени, чтобы написать все это, как это сделал Румель. Мое мнение, что такой ответ заслуживает уважения и наверняка поможет больше, чем просто написать, где можно найти ответ. Написать легко: просто погуглите! но смысл Stack Overflow не в этом... это только мое мнение, и вы не обязаны с ним соглашаться! - person lewis4u; 27.08.2016

После запуска php artisan migrate вам нужно запустить php artisan db:seed, чтобы записать семена в базу данных, вы можете следовать этим инструкциям: https://laravel.com/docs/5.2/seeding#using-model-factories

другой полезный пакет: https://github.com/fzaninotto/Faker, поможет вам подделать данные в базу данных .

person Raymond Cheng    schedule 27.08.2016
comment
fzaninottot/Faker создает фиктивные данные, и я хочу, чтобы мои данные были вставлены. Например, у меня есть таблица car_company, и я хочу, чтобы эти поля были заполнены в моей таблице после запуска php artisan db:seed id car_company 1 Volkswagen 2 Mercedes 3 Audi 4 Porsche Как должно выглядеть это начальное число? - person lewis4u; 27.08.2016
comment
@ lewis4u, если вам нужны именно данные, вы должны сбросить свои данные в файл xxx.sql, а затем в следующий раз импортировать его после переноса. Или запишите статические данные в начальный файл. - person Raymond Cheng; 27.08.2016
comment
хорошо, я понял... я могу экспортировать данные, но как их импортировать с помощью laravel. это возможно? или я должен использовать СУБД или phpmyadmin? - person lewis4u; 27.08.2016
comment
@ lewis4u, из команды оболочки вы можете использовать эту команду mysql -uroot (-ppasswd) databasename < sqlfilename.sql для импорта в базу данных, я думаю, вы можете написать оболочку, а затем использовать php для запуска оболочки. - person Raymond Cheng; 27.08.2016
comment
хорошо, что сойдет, но все же... я хотел бы иметь семя для заполнения моих данных :( - person lewis4u; 27.08.2016
comment
@lewis4u @lewis4u, если это полезно, пожалуйста, примите мой ответ, тогда мы оба получим репутацию.спасибо - person Raymond Cheng; 27.08.2016
comment
Если вы знаете, как написать начальное число для вставки более одной строки в таблицу, обновите свой ответ. - person lewis4u; 27.08.2016

На данный момент для таких ситуаций я использую миграции баз данных. Вам не нужно иметь в миграции только создание структуры базы данных, но вы также можете в миграции добавлять данные в базу данных, поэтому будет достаточно запустить php artisan migrate для создания структуры базы данных и создания необходимых данных в базе данных.

person Marcin Nabiałek    schedule 27.08.2016
comment
Не могли бы вы сделать такой пример миграции с вставкой более одной строки в таблицу? например, как в моем вопросе, если у меня есть миграция для создания таблицы car_companys (с полями id и name), и я хочу вставить 2 строки: BMW и AUDI.... как бы это выглядело? - person lewis4u; 27.08.2016