2016-08-27 3 views
2

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

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

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

php artisan migrate 

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

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

Как сделать семена для этого данные, которые должны идти в car_company таблице:

ID car_company

1 Volkswagen

2 Mercedes

3 Audi

4 Porsche

Есть 4 ряда a ой я хочу, чтобы вставить их после запуска

php artisan db:seed 
+0

Ive использовал приложение PHP, у которого есть это и его хорошее. Я планировал написать сценарий, который делает это сам. то, как я это сделал, просто добавьте проверку на этапе инициализации приложения. Вы можете проверить, на какой номер миграции находится исходный код, а затем запросить таблицу отслеживания миграции в БД, если БД находится за базой кода, вы можете остановить выполнение приложения и просто распечатать сообщение - * вы необходимо запустить миграции * –

+0

да, я просто хочу сделать это семя после запуска миграции в первый раз, поэтому в таблице есть эти данные, чтобы приложение было полностью функциональным! – lewis4u

+0

ну, я думаю, проблема в том, что больше обнаружения и отображения сообщения. его просто создать псевдоним оболочки или что-то, что просто сделает обе команды, но тогда вам нужно обучить людей, которые им нужно изучить, найти и использовать новый скрипт/команду. Но люди уже знают, что вы не можете использовать БД, если его не посеять. и ремесленное командование семени уже является общим знанием. Другая проблема заключается в том, что когда вы автоматизируете что-то вроде посева, вы теряете контроль над тем, когда происходит посев, поэтому БД может быть засеяна, когда вы тоже этого не хотите. –

ответ

3

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

PHP ремесленник делают: сеялка CarCompanyTableSeeder. Это создаст класс CarCompanyTableSeeder в базе данных \ seed.

enter image description here

Внутри функции публичную функцию запуска() пожалуйста, добавьте следующие коды:

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 расширяет Сеялка в базы данных \ семян. Внутри класса есть функция run().Добавьте следующий код там:

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

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

     Model::reguard(); 
    } 

Теперь, когда вы будете запускать PHP мастеровых дб: семена, то ваши желаемые значения будут вставляться там.

+2

Наверх для хорошо описанного ответа –

+1

@ Rumel Это пример того, как должны выглядеть все ответы – lewis4u

+1

Спасибо @ lewis4u. Я очень рад, что мой ответ помог вам. :) – Rumel

0

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

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

+0

fzaninottot/Faker создает фиктивные данные, и я хочу, чтобы мои данные были вставлены. Например у меня есть таблицы car_company и я хочу, чтобы эти поля должны быть посеяны в моей таблице после того, как я бегу PHP мастеровых дб: Семя ID \t car_company Volkswagen Mercedes Audi Porsche Как должен это семя выглядит как? – lewis4u

+0

@ lewis4u, если вы хотите точно указать данные, вы должны сбрасывать свои данные в файл xxx.sql, а затем в следующий раз импортировать его после переноса. Или напишите статические данные в файле семени. –

+0

ОК, я получаю это ... я могу экспортировать данные, но как импортировать их с laravel. это возможно? или я должен использовать СУБД или phpmyadmin? – lewis4u

0

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

+0

Можете ли вы сделать такой пример миграции с вставкой более одной строки в таблицу? Например, как в моем вопросе, если у меня есть миграция для создания table car_companys (с именами полей и именем), и я хочу вставить две строки: BMW и AUDI .... как бы это выглядело? – lewis4u

Смежные вопросы