一般に、アプリケーションを構築するときは、単純なデータを挿入する必要があります。結論として、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 次に、データが挿入されているかどうかをクエリできます:
これを見た後は、これらの人々の名前に電子メール名がどのように自動生成されるのかを尋ねることになるでしょう。以下を見てみましょう。
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'); }}
今回はモデルとファクトリーを同時に作成し、コマンドラインを実行します:
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-autoload2. コマンド ラインを使用してシーダーを作成します: 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、以下に示すように、データは正常に挿入されます: