Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第3回】

#制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code

#関連記事
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第1回】](https://qiita.com/Charry/items/74d5f9d2335a86a6ae17)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第2回】](https://qiita.com/Charry/items/9bb74c5b0384b3954a36)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第4回】](https://qiita.com/Charry/items/79ad43e81a78733750fd)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第5回】](https://qiita.com/Charry/items/ed119428a385cc409f66)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第6回】](https://qiita.com/Charry/items/b2c3b1275d22d9aee3bc)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第7回】](https://qiita.com/Charry/items/e1d8e2383adbfa7eb704)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【最終回】](https://qiita.com/Charry/items/7e8ba0fe83920728105b)

#はじめに
この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。

記事を作成するにあたり、以下のサイトを参考にしています。
こちらの方が詳しいので、当方で付け加えている要件が不要であれば、以下を参考にした方がいいと思います。

https://reffect.co.jp/laravel/laravel-multi-authentication-understand

長くなるので、何回かに分けて記事を投稿します。

#管理者用のモデルを作成
Laravelのプロジェクトのディレクトリでターミナルを開き、モデルを作成します。

```PHP
php artisan make:model Models/Admin -m
```

-m を付けることで、マイグレーションファイルも同時に作成します。

#####★ポイント★
Modelsフォルダの中にAdmin.phpを作成するので、必ずモデル名の前にModels/を付けてください。

#マイグレーションファイルの編集
マイグレーションファイルcreate_users_tableを開き、nameにuniqueを追記した後、以下の内容を全てコピーします。
※最終的にメールアドレスでの認証から、ユーザー名(ユーザーID)での認証に変更する為、uniqueをnameに設定してます。
認証に使用するカラムはuniqueでなければなりません。

```PHP:create_users_table
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name')->unique(); // ->unique()を追記
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}
```

次に、マイグレーションファイルcreate_admins_tableを開き、コピーした内容を貼り付けます。
貼り付け後、usersの部分をadminsに変更します。

```PHP:create_admins_table
public function up()
{
    Schema::create('admins', function (Blueprint $table) {
        $table->id();
        $table->string('name')->unique();
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}
```

#モデルの編集
ModelsフォルダのUser.phpを開き、中身をコピーします。

```PHP:User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}
```

次にモデル、Admin.phpを開き、コピーした内容を貼り付けます。
class User部分はclass Adminに変更してください。

```PHP:Admin.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Admin extends Model
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}
```

#テーブルの作成
ターミナルで以下を実行し、テーブルを作成してください。

```PHP
php artisan migrate
```

今回はここで終了です。
次回に続く。