見出し画像

laravelにおけるユーザー管理機能の実装方法

1.目的

ユーザーの管理ができるように機能を実装する。

2.必要なもの

なし

3.手順

①terminalにて以下のコマンドを実行しlaravel/uiパッケージをインストールします。

% composer require laravel/ui --dev

②以下のようにartisanコマンドを実行します。

% php artisan vi vue --auth

③以下のコマンドで*npmパッケージをインストールします。

% npm install
*npmパッケージ
npmの正式名称は、Node Package Managerです。
npmの正式名称からも解るように、Node.jsのパッケージ(Package )を管理する(Manager)ツールです。
Node.jsのパッケージ(Package)とは、予め用意された便利な機能をまとめたものです。

④以下のコマンドでパッケージをビルドします。

% npm run dev

⑤次にデーターベースにテーブルを作成していきます。
Sequel Proにてデーターベースの追加を行います。

画像1


このまま、php artisan migrateした場合以下のようなエラーが発生します。
1071 Specified key was too long; max key length is 767 bytes

・WHY
Laravelでは、バージョン5.4以降に、MySQLのデフォルトキャラクタセットがutf8mb4に変更されました。
Laravelがデフォルトのキャラクタセットをutf8mb4に変更した理由は、UTF8の絵文字などをDBに正しく保存出来るようにしたためです。
utf8mb4のキャラクタセットだとデータを格納する際、1文字当たり4byteの領域が必要です。また、Laravelのマイグレーションではstring型のカラムを作ったときに、varchar(255)としてデータ型を指定します。utf8mb4のcharasetで255文字を格納する列を作った場合、データ長は最大255*4=1020byteになります。
一方で、MySQLのVer5.7.7以前の場合、テーブルのIndexに指定できるデータ長は最大767byteです。
このため、Ver5.7.7以前のMySQLに対してテーブルの作成を行うと、MySQLが許容するIndexのデータ長767Byteを超えてしまい、エラーmax key length is 767 bytesが発生します。

⑥以上の理由のため、MySQLのバージョンを5.7.7以降にアップデートしたり、DBのcharasetをutf8mb4にしない"という選択肢もありますが、文字列型の列を作る時にデフォルトのデータ長を変更してしまうのが最も簡単です。
Laravelのマイグレーションで、create tableする時に、varcharのデータ長を191文字になるよう変更します。191文字にすることで、191*4=764byteとなるためindexの最大長である767byte以内に収まります。

実際に変更するファイルは、app\Providers\AppServiceProvider.phpで以下のように変更します。

<?
php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
//以下追加
use Illuminate\Support\Facades\Schema;
//ここまで
class AppServiceProvider extends ServiceProvider
{
   /**
    * Register any application services.
    *
    * @return void
    */
   public function register()
   {
       //
   }
   /**
    * Bootstrap any application services.
    *
    * @return void
    */
   public function boot()
   {
       //以下追加
       Schema::defaultStringLength(191);
       //ここまで
   }
}

⑦次にterminalにて以下のコマンドを実行し、テーブルを作成します。

% php artisan serve

⑧以下のurlに遷移し登録ができログインできるかどうか確認をします。

http://localhost:8000/register

スクリーンショット 2021-08-15 14.09.49


この記事が気に入ったらサポートをしてみませんか?