サーチ…
シーダーを動かす
新しいSeederをDatabaseSeederクラスに追加することができます。
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
データベースシーダーを実行するには、Artisanコマンドを使用します
php artisan db:seed
これにより、DatabaseSeederクラスが実行されます。 --class=
オプションを使用して、実行するシーダーを手動で指定することもできます。
* Seederクラスが見つからない場合は、composer dumpautoloadを実行する必要があります。これは通常、artisanコマンドを使用する代わりに手動でシーダークラスを作成する場合に発生します。
シードの作成
データベースシードは、/ database / seedsディレクトリに格納されます。アーティザンコマンドを使用してシードを作成できます。
php artisan make:seed UserTableSeeder
または、 Illuminate\Database\Seeder
を拡張する新しいクラスを作成することもできます。このクラスは、 run()
という名前のパブリック関数でなければなりません。
シーダーを使用したデータの挿入
シーダーでモデルを参照できます。
use DB;
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
# Remove all existing entrie
DB::table('users')->delete() ;
User::create([
'name' => 'Admin',
'email' => '[email protected]',
'password' => Hash::make('password')
]);
}
}
モデルファクトリでデータを挿入する
種子内でモデルファクトリを使用したい場合があります。これにより、3人の新しいユーザーが作成されます。
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
factory(User::class)->times(3)->create();
}
}
例えば、シード上の特定のフィールドをパスワードのように定義することもできます。これにより、同じパスワードを持つ3人のユーザーが作成されます。
factory(User::class)->times(3)->create(['password' => '123456']);
MySQLダンプでシードする
シードを作成する前述の例に従います。この例では、MySQL Dumpを使用してプロジェクトデータベースにテーブルをシードします。シードする前にテーブルを作成する必要があります。
<?php
use Illuminate\Database\Seeder;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$sql = file_get_contents(database_path() . '/seeds/users.sql');
DB::statement($sql);
}
}
私たちの$ sqlはusers.sqlダンプの内容になるでしょう。ダンプにはINSERT INTO文が必要です。ダンプを保管する場所はあなた次第です。上記の例では、プロジェクトディレクトリ\database\seeds
格納されてい\database\seeds
。 laravelのヘルパー関数database_path()
を使用し、ダンプのディレクトリとファイル名を追加します。
INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');
DB::statement($sql)
は、Seederが実行されると挿入を実行します。前の例と同様に、 UserTableSeeder
はUserTableSeeder
によって提供されたDatabaseSeeder
クラスに置くことができます:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
}
プロジェクトディレクトリphp artisan db:seed
CLIから実行します。あるいは、 php artisan db:seed --class=UsersTableSeeder
を使って単一のクラスに対してphp artisan db:seed --class=UsersTableSeeder
を実行することもできます
fakerおよびModelFactoriesを使用して種子を生成する
1)基本的な簡単な方法
データベース駆動型アプリケーションでは、テストやデモの目的で、システムにあらかじめデータを組み込む必要があります。
このようなデータを作成するには、まずシーダークラスを作成します
ProductTableSeeder
use Faker\Factory as Faker;
use App\Product;
class ProductTableSeeder extends DatabaseSeeder {
public function run()
{
$faker = $this->getFaker();
for ($i = 0; $i < 10; $i++)
{
$name = $faker->word;
$image = $faker->imageUrl;
Modelname::create([
'name' => $name,
'image' => $image,
]);
}
}
}
シーダークラスを実行できるようにするには、実行したいシーダーの名前を渡すだけで、DatabaseSeederクラスから呼び出すことができます。
Illuminate \ Database \ Seederを使用します。
class DatabaseSeeder extends Seeder {
protected $faker;
public function getFaker() {
if (empty($this->faker)) {
$faker = Faker\Factory::create();
$faker->addProvider(new Faker\Provider\Base($faker));
$faker->addProvider(new Faker\Provider\Lorem($faker));
}
return $this->faker = $faker;
}
public function run() {
$this->call(ProductTableSeeder::class);
}
}
Seederを作成した後、 $ composer dump-autoload
を実行するのを忘れないでください。artisanコマンド$ php artisan make:seeder Name
シーダーを作成しない限り、作者によって自動的にオートロードされないので、
これで、この職人のコマンドphp artisan db:seed
実行することで、種をつける準備ができましたphp artisan db:seed
2)モデル工場を利用する
まず、 App/database/factories/ModelFactory.php
各モデルのデフォルトの属性セットを定義します
ユーザーモデルを例として取り上げると、ModelFactoryのように見えます
$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),
];
});
今すぐテーブルシーダーを作成するphp artisan make:seeder UsersTableSeeder
これを追加します
public function run()
{
factory(App\User::class, 100)->create()
}
これをDatabaseSeeder
追加しDatabaseSeeder
public function run()
{
$this->call(UsersTableSeeder::class);
}
これにより、100レコードのテーブルが作成されます。