ホームページ  >  記事  >  バックエンド開発  >  [中級Laravel] 9-データベースシーディングとモデルファクトリー

[中級Laravel] 9-データベースシーディングとモデルファクトリー

WBOY
WBOYオリジナル
2016-06-20 12:30:431246ブラウズ

はじめに

一般に、アプリケーションを構築するときは、単純なデータを挿入する必要があります。結論として、Database-Seeding 関数を実行する必要があります。

データベース シード データの充填

デフォルトでは、databaseseeds の下に DatabaseSeeder.php が 1 つだけあります。新しい UsersTableSeeder.php クラスを作成します:

class UsersTableSeeder extends Seeder{  /**   * Run the database seeds.   *   * @return void   */  public function run()  {    //不用factory,也可以使用App\User::create()或者DB::table()等    factory('App\User',50)->create();  }} 

DatabaseSeeder.php を変更します:

class DatabaseSeeder extends Seeder{  /**   * Run the database seeds.   *   * @return void   */  public function run()  {    Model::unguard();    //调用UsersTableSeeder    $this->call('UsersTableSeeder');  }} 

db:seed コマンドを実行します: phpArtisan db:seed 次に、データが挿入されているかどうかをクエリできます:

  • Unix システムでは、次のコマンド ラインを使用します: sqlite3 storage/database.sqlite select * from users;
  • Windows システムでは、Database4 ソフトウェアの無料バ​​ージョンをダウンロードしてストレージを開くことができます。 /database.sqlite ディレクトリ ファイルを表示します:

これを見た後は、これらの人々の名前に電子メール名がどのように自動生成されるのかを尋ねることになるでしょう。以下を見てみましょう。

データ ルール

databasefactories ディレクトリ内の ModelFactory.php は、User テーブルにデータを挿入するためのルールを定義します。

$factory->define(App\User::class, function (Faker\Generator $faker) {  return [    'name'          => $faker->name,    'email'          => $faker->email,    'password'      => bcrypt(str_random(10)),    'remember_token' => str_random(10),  ];}); 

UsersTableSeeder繰り返しの書き込みルール:

class UsersTableSeeder extends Seeder{  /**   * Run the database seeds.   *   * @return void   */  public function run()  {    //可以重写Model Factories中规则,统一插入 John Doe 的 name    factory('App\User',50)->create([      'name'  =>  'John Doe'    ]);  }} 

結果は以下のようになります:

データを挿入する前に無効なデータを削除できます:

class DatabaseSeeder extends Seeder{   protected $toTruncate = ['users'];   /**   * Run the database seeds.   *   * @return void   */  public function run()  {    Model::unguard();    // 循环删除表    foreach($this->toTruncateas $table)    {      DB::table($table)->truncate();    }     $this->call('UsersTableSeeder');  }} 

新しい LessonSeeder を作成します

今回はモデルとファクトリーを同時に作成し、コマンドラインを実行します:

phpArtisan make:model Lesson --migration

すべての CreateLessonsTable の属性フィールドを補足します:

class CreateLessonsTable extends Migration{  /**   * Run the migrations.   *   * @return void   */  public function up()  {    Schema::create('lessons', function (Blueprint $table) {      $table->increments('id');      $table->string('title');      $table->text('body');      $table->timestamp('published_at');      $table->timestamps();    });  }   /**   * Reverse the migrations.   *   * @return void   */  public function down()  {    Schema::drop('lessons');  }} 

コマンド ライン: php 職人 移行 を実行して、レッスン テーブル構造を作成します。

DatabaseSeeder で LessonsTableSeeder への呼び出しを完了します

class DatabaseSeeder extends Seeder{   protected $toTruncate = ['users'];   /**   * Run the database seeds.   *   * @return void   */  public function run()  {    Model::unguard();    // 循环删除表    foreach($this->toTruncateas $table)    {      DB::table($table)->truncate();    }     $this->call('UsersTableSeeder');    $this->call('LessonsTableSeeder');  }} 

コマンドライン php 職人 db:seed を実行すると、次の例外が表示されます。 :

その理由は次のとおりです: デフォルトではデータベースのみがcomposer.jsonにロードされます

解決策は2つあります:

1. コマンドラインcomposerを実行します。 dump-autoload

2. コマンド ラインを使用してシーダーを作成します: php 職人 make:seeder LessonsTableSeeder

データの挿入

ModelFactory.php にレッスンの挿入データ ルールを追加します。

$factory->define(App\Lesson::class, function (Faker\Generator $faker) {  return [    'title'          => $faker->sentence,    'body'            => $faker->paragraph,    'published_at'    => $faker->dateTime()  ];}); 

コマンドラインを再度実行します: phpArtisan db:seed, OK、以下に示すように、データは正常に挿入されます:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。