Laravel5.4: DBとしてSQLiteを用意する

ローカル開発環境で使うDBを用意します。
今回はSQLiteを使います。
なお、Laravel5.5ではMySQLを使うことにしました。
それについては下記を御覧ください。
:link: [Laravel5.5: DBとしてMySQLを用意する - Qiita](https://qiita.com/sutara79/items/e19fb386451ab9a4a5fa)

# 親記事
[Laravel 5.4で基本的なCRUDを作る - Qiita](http://qiita.com/sutara79/items/ef30fcdfb7afcb2188ea)


# 環境設定ファイルを修正する
SQLite用に`.env`のDB接続の部分を修正します。
<i class="fa fa-external-link"></i> [環境設定](https://readouble.com/laravel/5.4/ja/configuration.html)

```txt:.env
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`に記述されているとおりの場所とファイル名で作ります。

```txt:PowerShell
> ni database\database.sqlite
```

# マイグレーションの準備をする
<i class="fa fa-external-link"></i> [マイグレーション](https://readouble.com/laravel/5.4/ja/migrations.html)

今回使うusers, postsテーブルのうち、usersテーブルは既存のマイグレーション設定を利用します。

## posts用のマイグレーション
Artisanコマンドでマイグレーションを生成します。

```txt:PowerShell
> php artisan make:migration create_posts_table
```

生成した`database/migrations/2017_05_22_041557_create_posts_table.php`の`up()`, `down()`の中身を下記のようにします。

```php:2017_05_22_041557_create_posts_table.php
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');
}
```

# テーブルの中身を用意する
<i class="fa fa-external-link"></i> [シーディング](https://readouble.com/laravel/5.4/ja/seeding.html)

## Fakerをインストール
仮のデータを自動生成してくれる[Faker](https://github.com/fzaninotto/Faker)を利用します。
通常は`require-dev`ですが、今回は本番のHerokuでも使いたいので`require`とします。

```text:PowerShell
> composer require fzaninotto/faker
```

## users用シーダー
```txt:PowerShell
# シーダーを生成
> php artisan make:seeder UsersTableSeeder
```

`run()`メソッドを下記のようにします。

```php:database/seed/UsersTableSeeder.php
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用シーダー
```txt:PowerShell
> php artisan make:seeder PostsTableSeeder
```

```php:database/seed/PostsTableSeeder.php
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()`メソッドを下記のようにします。

```php:database/seeds/DatabaseSeeder.php
public function run()
{
    $this->call(UsersTableSeeder::class);
    $this->call(PostsTableSeeder::class);
}
```


# マイグレーションとシーディングを実行する
```txt:PowerShell
# マイグレーション
> php artisan migrate --seed
```

これでdatabase.sqliteにテーブルが2つ作成されます。


- - -
# 補足
## マイグレーションをやり直したい
<i class="fa fa-external-link"></i> [ロールバック](https://readouble.com/laravel/5.4/ja/migrations.html#rolling-back-migrations)

`rollback`, `reset`コマンドを使えます。
あちこちいじったDBの内容をきれいにしたい場合は下記のように。

```txt:PowerShell
# テーブルを削除
> php artisan migrate:refresh --seed
```