1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel Authで実装した認証機能の初回登録時にオリジナルカラムデータの保存に対応する。

Posted at

目的

  • ユーザの初回登録時にデフォルトでは存在していないカラムへ自動的に値を格納する方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.3)
ハードウェア MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いて導入
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入

前提情報

実施したい事

  • Authの認証に使用されるusersテーブルは初期状態で下記のカラムで構成されている。

    mysql> show columns from users;
    +-------------------+-----------------+------+-----+---------+----------------+
    | Field             | Type            | Null | Key | Default | Extra          |
    +-------------------+-----------------+------+-----+---------+----------------+
    | id                | bigint unsigned | NO   | PRI | NULL    | auto_increment |
    | name              | varchar(255)    | NO   |     | NULL    |                |
    | email             | varchar(255)    | NO   | UNI | NULL    |                |
    | email_verified_at | timestamp       | YES  |     | NULL    |                |
    | password          | varchar(255)    | NO   |     | NULL    |                |
    | remember_token    | varchar(100)    | YES  |     | NULL    |                |
    | created_at        | timestamp       | YES  |     | NULL    |                |
    | updated_at        | timestamp       | YES  |     | NULL    |                |
    +-------------------+-----------------+------+-----+---------+----------------+
    
  • この情報にプラスしてサービスを使用するユーザが結婚しているかどうかのデータを格納する「marriage_flag」カラムを追加する。

  • 「marriage_flag」カラムは次の条件で作成する。(カラム名: marriage_flag データ型: int NULLの許容: しない 初期値:0)

    +-------------------+-----------------+------+-----+---------+----------------+
    | Field             | Type            | Null | Key | Default | Extra          |
    +-------------------+-----------------+------+-----+---------+----------------+
    | marriage_flag     | int             | NO   |     | 0       |                |
    +-------------------+-----------------+------+-----+---------+----------------+
    
  • カラム設定でも初期値を指定するが、ユーザ登録シーケンス内でもアプリ側で値を格納するように処理を行う。

  • 「marriage_flag」は0が格納されている時は未婚、1が格納されている時は既婚、2が格納されている時はその他をお見する。

概要

  1. カラムの追加
  2. 登録処理の値追加
  3. 確認

概要

  1. カラムの追加
    1. 下記コマンドを実行してマイグレーションファイルを作成する。

      $ php artisan make:migration add_marriage_flag_column_to_users_table --table=users
      
    2. 下記コマンドを実行して先に作成したマイグレーションファイルを開く(yyyy_mm_ddはマイグレーションファイルの作成日)

      $ vi database/migrations/yyyy_mm_dd_XXXXXX_add_marriage_flag_column_to_users_table.php
      
    3. 開いたマイグレーションファイルを下記の様に修正しする。

      アプリ名ディレクトリ/database/migrations/yyyy_mm_dd_XXXXXX_add_marriage_flag_column_to_users_table.php
      <?php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      class AddMarriageFlagColumnToUsersTable extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::table('users', function (Blueprint $table) {
                  //下記を追記する
                  $table->integer('marriage_flag')->default(0);
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::table('users', function (Blueprint $table) {
                  //下記を追記する
                  $table->dropColumn('marriage_flag')->default(0);
              });
          }
      }
      
    4. 下記を実行してマイグレーションを実行する。

      $ php artisan migrate
      
  2. 登録処理の値追加
    1. 下記コマンドを実行してユーザ登録時に実行されるコントローラファイルを開く。

      $ vi app/Http/Controllers/Auth/RegisterController.php
      
    2. 開いたコントローラファイルを下記の様に修正して初期値を指定する。

      アプリ名ディレクトリ/app/Http/Controllers/Auth/RegisterController.php
      <?php
      
      namespace App\Http\Controllers\Auth;
      
      use App\Http\Controllers\Controller;
      use App\Providers\RouteServiceProvider;
      use App\User;
      use Illuminate\Foundation\Auth\RegistersUsers;
      use Illuminate\Support\Facades\Hash;
      use Illuminate\Support\Facades\Validator;
      
      class RegisterController extends Controller
      {
          /*
          |--------------------------------------------------------------------------
          | Register Controller
          |--------------------------------------------------------------------------
          |
          | This controller handles the registration of new users as well as their
          | validation and creation. By default this controller uses a trait to
          | provide this functionality without requiring any additional code.
          |
          */
      
          use RegistersUsers;
      
          /**
           * Where to redirect users after registration.
           *
           * @var string
           */
          protected $redirectTo = RouteServiceProvider::HOME;
      
          /**
           * Create a new controller instance.
           *
           * @return void
           */
          public function __construct()
          {
              $this->middleware('guest');
          }
      
          /**
           * Get a validator for an incoming registration request.
           *
           * @param  array  $data
           * @return \Illuminate\Contracts\Validation\Validator
           */
          protected function validator(array $data)
          {
              return Validator::make($data, [
                  'name' => ['required', 'string', 'max:255'],
                  'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                  'password' => ['required', 'string', 'min:8', 'confirmed'],
              ]);
          }
      
          /**
           * Create a new user instance after a valid registration.
           *
           * @param  array  $data
           * @return \App\User
           */
          protected function create(array $data)
          {
              return User::create([
                  'name' => $data['name'],
                  'email' => $data['email'],
                  'password' => Hash::make($data['password']),
                  //下記を追加する
                  'marriage_flag' => 0,
              ]);
          }
      }
      
  3. 確認
    1. アプリ名ディレクトリで下記コマンドを実行してローカルサーバを起動する。

      $ php artisan serve
      
    2. 下記にアクセスする。

    3. ユーザの新規登録を行う。

    4. 下記コマンドを実行してターミナルからMySQLにログインする。

      $ mysql -u root -p
      
    5. 下記を実行してデータベース名の一覧を出力する。

      mysql> show databases;
      
    6. 下記を実行してLaravelアプリで使用しているDBを指定する。

      mysql> use データベース名;
      
    7. 下記を実行してusersテーブルのデータを出力する。

      mysql> select * from users;
      
    8. 新規登録したレコードのmarriage_flagカラムに0が格納されている事を確認する。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?