LaravelでModel,Controller,Migration,Seederファイル作成


## Laravel備忘録

コマンドを使ってファイルを作成する方法をまとめました。

## 目次
[・Model](##Model)
[・Controller](#Controller)
[・Request](#Request)
[・Migration](#Migration)
[・Seeder](#Seeder)

# Model
```
php artisan make:model ファイル名
```

ファイル名の命名規則は **アッパーキャメル** 

例）　CompanyBranch
```
php artisan make:model CompanyBranch
```
作成されるファイル名 ＝＞ CompanyBranch.php

### Modelファイルの内容

コマンドを実行すると以下が書かれたphpファイルが生成されます。
``` php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class CompanyBranch extends Model
{
    use HasFactory;
}
```

そこに色々と記述を追加していきます。
```php
<?php

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
// ソフトデリートを使用するためのトレイトをインポート
use Illuminate\Database\Eloquent\SoftDeletes;


/**
 * App\Models\Event

 */
class CustomerAmount extends Model
{
    // HasFactoryとSoftDeletesトレイトを使用する
    use HasFactory, SoftDeletes;

    // create()やfill()、update()で代入してはいけないカラムを指定する
    protected $guarded = [];

    // テーブル名を指定する
    protected $table = 'customer_amount';

    /**
     * Carbonに変形
     * @var array
     */
    // 日付ミューテタを有効にする
    protected $dates = [
        'deleted_at',
    ];

    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        parent::boot();

    }
}
```



# Controller
```
php artisan make:controller ファイル名
```

ファイル名の命名規則は **アッパーキャメル** 
ファイル名の最後に **Controller** をつける

例）　CompanyBranch
```
php artisan make:controller CompanyBranchController
```

作成されるファイル名 ＝＞ CompanyBranchController.php


### Controllerファイルの内容
コマンドを実行すると以下の記述があるファイルが生成されます。
```php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class testController extends Controller
{
    //
}

```

色々と記述を追加していきますが、ここはキリがないので省略します。




# Request
```
php artisan make:request ファイル名
```

ファイル名の命名規則は **アッパーキャメル** 
ファイル名の最後に **Request** をつける

例）　CompanyBranch
```
php artisan make:request CompanyBranchRequest
```

作成されるファイル名 ＝＞ CompanyBranchRequest.php

### Requestファイルの内容
コマンドを実行すると以下の記述があるファイルが生成されます。
```php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class testRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
        ];
    }
}
```

リクエストで送られてくるデータの型や必須、任意などを指定する場合は
returnの箇所に
```php
'customer_id' => ['required', 'int', 'min:1'],
```

こんな感じで記述を追加していきます。


# Migration
```
php artisan make:migration ファイル名 --create=テーブル名
```

ファイル名の命名規則は **スネークケース** 
目的に沿ったファイル名にする

例）　Customerテーブルを作成するMigrationファイル
```
php artisan make:migration create_customer_table --create=customers
```

作成されるファイル名 ＝＞ **日付_create_customer_table.php**

※日付はファイルを作成すると自動で付与されます。

### Migrationファイルの内容

自動で作成されたphpファイルのSchemaの中コメント部分に記入する

以下サンプル

``` php
Schema::create('customers', function (Blueprint $table) {
    $table->id();
    $table->bigInteger('company_id');
    $table->string('memo', 128)->nullable()->comment('メモ');
    $table->timestamps();
    $table->softDeletes();
});
```

カラムタイプ、カラム修飾子 一覧
[Laravelドキュメント](https://readouble.com/laravel/8.x/ja/migrations.html)


最後に以下を実行してDBに反映させる
```
php artisan migrate:fresh --seed
```

migrateは過去の日付から順に実行されていくので、
複数のファイルで同じテーブル、カラムの変更をした場合は
最新の日付のmigrationファイルの変更が最終的にDBに反映されます。


  　　



＝ポイント＝
upメソッドのSchema::tableのクロージャの中には追加するカラムを記載

downメソッドのSchema::tableのクロージャの中にはロールバック時の処理を記述

既存のカラムを変更したい場合は以下のコマンドを実行して
変更用の追加のパッケージをインストールする
```
composer require doctrine/dbal
```





# Seeder

```
php artisan make:seeder ファイル名
```

ファイル名の命名規則は **アッパーキャメル** 
ファイル名の最後に **Seeder** をつける

例）　CompanyBranch
```
php artisan make:seeder CompanyBranchSeeder
```

作成されるファイル名 ＝＞ CompanyBranchSeeder.php

seederを実行する場合は以下のコマンドを実行
（　php artisan db:seed --class=ファイル名　）
```
php artisan db:seed --class=CompanyBranchSeeder
```