2016-08-27 13 views
2

私のアプリが動作するためには、テーブル内にある必要があるデータがあります。そうでなければエラーメッセージが表示されます。Laravel 5 - アプリをデプロイした後にテーブルを自動的にシードする方法

たとえば、あなたや他の誰かがgithubから自分のアプリをプルし、php artisan migrateを実行してアプリをテストしようとすると、エラーが発生します。 データが存在しないかそのようなものです。 テーブルにデータがないためです。

だから、理想的なソリューションを実行した後、次のようになります。あなたも取得

php artisan migrate 

が、これはそのテーブル内のデータを必要としていました。

これはシーダーと何とかやりますが、どうすればいいのか分かりません。誰でも助けて私に例を挙げることができますか? car_companyテーブルに行くべきこのデータの種にする方法

のid car_company

1フォルクスワーゲン

2メルセデス

3アウディ

4ポルシェ

4行があります。 ND私はあなたがデータベースに種を書き込むためにphp artisan db:seed、 を実行する必要があります実行php artisan migrate

php artisan db:seed 
+0

Iveはこれとその利点を持つPHPアプリケーションを使用しました。私はこれを自分で行うスクリプトを書くつもりです。私がやる方法は、単にアプリケーションの初期化段階で小切手を追加することです。ソースコードの移行数を確認して、DB内の移行追跡テーブルを照会することができます.DBがコードベースの背後にある場合は、アプリケーションの実行を停止してメッセージを出力することができます。移行を実行する必要があります* –

+0

ええ、私はちょうど最初に移行を実行した後にこの種子を作りたいので、テーブルにこのデータがあり、完全に機能するようになっています! – lewis4u

+0

よく私は問題がより多くの検出とメッセージの表示だと思う。シンプルなシェルエイリアスや単純に両方のコマンドを実行するものを作成するのが簡単ですが、次に、新しいスクリプト/コマンドを学び、見つけて使用する必要があることを人々に教える必要があります。しかし、人々はすでに、種まきをしなければDBを使うことができないことを知っています。種子への職人の命令はすでに一般的な知識である。もう1つの問題は、シードのようなものを自動化するときに、シードが発生したときのコントロールが失われるため、DBが必要なときにシードされる可能性があります。 –

答えて

3

は、次のコマンドを実行します。これはクラスCarCompanyTableSeederデータベース\種子に作成します。別のクラスクラスDatabaseSeederがあり

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); 
    } 

データベース\種子にシーダー拡張:は以下のコードを追加してください()関数パブリック関数の実行インサイド

enter image description here

。クラス内には、関数run()があります。そこに次のコードを追加します。

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

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

     Model::reguard(); 
    } 

さて、あなたはPHPの職人デシベル実行する時期:シード、その後、ご希望の値が挿入されます。

+2

よく答えられた答えの投票を –

+1

@Rumelこれはどのようにすべての答えが見えるかの例です〜のように! – lewis4u

+1

ありがとう@ lewis4u。私はあなたの助けがあなたを助けたことを非常に嬉しく思っています。:) – Rumel

0

を実行した後にそれらを挿入するには、この指示に従うことができます。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 フォルクスワーゲン 2台の\tメルセデスアウディポルシェ どのようにすべきで、この種ののように見える? – lewis4u

+0

@ lewis4u、正確なデータが必要な場合は、データをxxx.sqlファイルにダンプしてから、次にマイグレーション後にインポートしてください。または、シードファイルに静的なデータを書き込んでください。 –

+0

OK、これは...データをエクスポートすることはできますが、laravelを使用してデータをインポートする方法はあります。それは可能ですか?または私はDBMSまたはphpmyadminを使用する必要がありますか? – lewis4u

0

このような状況では、私はデータベースの移行を使用します。移行ではデータベース構造の作成のみを行う必要はありませんが、移行ではデータをデータベースに追加することで、php artisan migrateを実行してデータベース構造を作成し、データベースに必要なデータを作成することができます。

PHPの職人メイク:シーダCarCompanyTableSeederまず

+0

テーブルに複数の行を挿入して、このような移行の例を作ることはできますか?たとえば、私が作成する移行がある場合は、私の質問のようにテーブルcar_companys(フィールドIDと名前を持つ)と私は2行を挿入したい:BMWとAUDI ....どのように見えるのだろうか? – lewis4u

関連する問題