ローカル開発環境で使うDBを用意します。
今回はSQLiteを使います。
なお、Laravel5.5ではMySQLを使うことにしました。
それについては下記を御覧ください。
Laravel5.5: DBとしてMySQLを用意する - Qiita
親記事
Laravel 5.4で基本的なCRUDを作る - Qiita
環境設定ファイルを修正する
SQLite用に.env
のDB接続の部分を修正します。
環境設定
DB_CONNECTION=sqlite
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=homestead
# DB_USERNAME=homestead
# DB_PASSWORD=secret
SQLiteファイルを作る
面倒を避けて、config/database.php
に記述されているとおりの場所とファイル名で作ります。
> ni database\database.sqlite
マイグレーションの準備をする
今回使うusers, postsテーブルのうち、usersテーブルは既存のマイグレーション設定を利用します。
posts用のマイグレーション
Artisanコマンドでマイグレーションを生成します。
> php artisan make:migration create_posts_table
生成したdatabase/migrations/2017_05_22_041557_create_posts_table.php
のup()
, down()
の中身を下記のようにします。
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
public function down()
{
Schema::drop('posts');
}
テーブルの中身を用意する
Fakerをインストール
仮のデータを自動生成してくれるFakerを利用します。
通常はrequire-dev
ですが、今回は本番のHerokuでも使いたいのでrequire
とします。
> composer require fzaninotto/faker
users用シーダー
# シーダーを生成
> php artisan make:seeder UsersTableSeeder
run()
メソッドを下記のようにします。
public function run()
{
$faker = Faker\Factory::create('ja_JP');
for ($i = 0; $i < 20; $i++)
{
DB::table('users')->insert([
'name' => $faker->unique()->userName(),
'email' => $faker->unique()->email(),
'password' => bcrypt('1234'),
'created_at' => $faker->dateTime(),
'updated_at' => $faker->dateTime(),
]);
}
}
posts用シーダー
> php artisan make:seeder PostsTableSeeder
public function run()
{
$faker = Faker\Factory::create('ja_JP');
for ($i = 0; $i < 20; $i++)
{
DB::table('posts')->insert([
'title' => $faker->text(20),
'body' => $faker->text(200),
'created_at' => $faker->dateTime(),
'updated_at' => $faker->dateTime(),
]);
}
}
シーダーの呼び出しを設定する
run()
メソッドを下記のようにします。
public function run()
{
$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
}
マイグレーションとシーディングを実行する
# マイグレーション
> php artisan migrate --seed
これでdatabase.sqliteにテーブルが2つ作成されます。
補足
マイグレーションをやり直したい
rollback
, reset
コマンドを使えます。
あちこちいじったDBの内容をきれいにしたい場合は下記のように。
# テーブルを削除
> php artisan migrate:refresh --seed