Laravel ~テーブルとデータの作成~

## はじめに
Laravelの勉強を開始して、約3ヶ月経ったので備忘録として記事に残しておきます。

## 動作環境
| PHP |	Laravel	| MySQL | 
| :---: | :---: | :---: | 
| 7.1.19 | 5.6.27 |5.7.22 |

## データベース作成
MySQLで今回使用するデータベースを作成します。

```
mysql > create database データベース名;
```

## .envファイル編集
```:.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=データベース名      
DB_USERNAME=MYSQLのユーザー名
DB_PASSWORD=設定しているパスワード
```
これで作成したデータベースをLaravelで使用できる。

## migrationファイル作成
artisanコマンドで下記を実行するとdatabase/migrations/にmigrationファイルが作成される。

```
php artisan make:migration create_books_table --create=books
```
```php:yyyy_mm_dd_xxxxxx_create_books_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('books');
    }
}
```
このファイルにカラムを追加していく。
### カラム作成例
| 記載方法 | 情報 |
| :---: | :---: | 
| $table->increments(カラム名); | 主キー |
| $table->integer(カラム名); | INT型 |
| $table->string(カラム名, 文字数); | VARCHAR型 |
| $table->text(カラム名); | TEXT型 |
| $table->dateTime(カラム名); | 日付と時間 |
| $table->timestamps(カラム名); | created_at, update_at  |
| $table->softDeletes(カラム名); | deleated_at  |

編集終わったら、マイグレーションを実行する。
そうするとbooksテーブルが作成される。

```
php artisan migrate
```
特定のmigrationファイルをマイグレーション実行する際は下記のコマンドを実行する。

```
php artisan migrate:refresh --step=1  --path=/database/migrations/yyyy_mm_dd_xxxxxx_create_books_table.php 
```

作成したテーブルを削除する際はロールバックすれば良い。

```
php artisan migrate:rollback
```

## 初期データ作成
今回は、seederという機能を使用して初期データを作成していく。
ますは、seederファイルの作成から始めます。

```
php artisan make:seeder BooksTableSeeder
```

上記コマンド実行することによってdatabase/seeds/以下に、BooksTableSeeder.phpが作成される。

```php:BooksTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class BooksTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
       //
    }
}
```

上記のrunメソッド内に追記していく。
例えば、、、
カラム名 => 初期データ で記述していく

```php:BooksTableSeeder.php
    public function run()
    {
        DB::table('books')->truncate();  //データのクリア
        DB::table('books')->insert([     //booksテーブルに登録するレコードを配列で記述していく
            [
                'name'    => 'コロコロコミック',
                'created_at' => Carbon::create(2018, 1, 1),
                'updated_at' => Carbon::create(2018, 1, 4),
            ],
            [
                'name'    => 'ゼクシィ',
                'created_at' => Carbon::create(2018, 2, 1),
                'updated_at' => Carbon::create(2018, 2, 5),
            ],
        ]);
    }
```

上記でCarbonという日付操作のライブラリを使用している。
使用のためには、use Carbon\Carbon;の記述必須。

記述終わったら、作成したseederファイルで初期データを投入するために同じディレクトリにある
DatabaseSeeder.phpに以下のように追記する。

```php:DatabaseSeeder.php
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(BooksTableSeeder::class); //この部分を追記
    }
}
```

最後に下記のコマンドを実行することで、初期データ作成完了！！

```
php artisan db:seed
```

## 参考

[https://readouble.com/laravel/5.5/ja/migrations.html](https://readouble.com/laravel/5.5/ja/migrations.html)
[https://readouble.com/laravel/5.5/ja/seeding.html](https://readouble.com/laravel/5.5/ja/seeding.html)