Laravel usersテーブルにカラムを追加してユーザー登録まで

laravelのトップ画像
目次

テーブルにカラムを追加

php artisan make:migration どのテーブルに追加してるかわかりやすい名前 –table=テーブル名

php artisan make:migration add_column_users_table --table=users

database/migrations/に作成される

class AddColumnUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }
}

追加したいカラムを書き込んでいく。
今回は、company_name、phone_number、adressを追加。

public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('company_name');
            $table->string('phone_number');
            $table->string('adress');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('company_name');
            $table->dropColumn('phone_number');
            $table->dropColumn('adress');
        });
    }

function upでカラム追加
function downはロールバック用

php artisan migrate

で、カラムが追加された。

User.phpの$fillableにカラム名を追加

app/User.php

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

ここに、先ほど追加したカラム名を書き足す。

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

保存。

register.blade.phpのformに書き足す

<div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('お名前') }}</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

この形式の(class=”form-group row”の部分)、をコピペで必要な分だけ増やす。(今回は3つです)

この部分は、”name” の値を渡す部分なので、コピペしたコードの’name’と書かれているところを、追加したカラム名に変えていく。

adressでの例)

<div class="form-group row">
                            <label for="adress" class="col-md-4 col-form-label text-md-right">{{ __('会社住所') }}</label>

                            <div class="col-md-6">
                                <input id="adress" type="text" class="form-control @error('adress') is-invalid @enderror" name="adress" value="{{ old('adress') }}" required autocomplete="adress" autofocus>

                                @error('adress')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

必要なカラム数だけ書き換えたら保存。

RegisterController.phpへ

app/Http/Controller/Auth/RegisterController.php

初期状態

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']),
        ]);
    }

ここに書き足す。

validateも必要ならValidatorに条件諸々かく。

 protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'company_name' => ['required', 'string', 'max:255'],
            'phone_number' => ['required', 'string', 'max:11'],
            'adress' => ['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'],
            'company_name' => $data['email'],
            'phone_number' => $data['email'],
            'adress' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }

で、終了。

補足

register.blade.phpで、labelにある{{ __(‘NAME’) }}
と書かれているところを、{{ __(‘お名前’) }}とかにすると、表示画面で「NAME」と表示されているのが「お名前」に変えれます。

laravelのトップ画像

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメント一覧 (3件)

  • めちゃ丁寧で本当に助かりました。
    良いサイト見つけました。
    これからも読ませて頂きます。
    ありがとうございました。

    • わざわざご丁寧にコメントくださりありがとうございます!!
      エラーも解決できたようでよかったです!

  • SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL (SQL: alter table “users” add column “company_name” varchar not null)

    と出てたので
    $table->string(‘company_name’)->nullable();
    $table->string(‘phone_number’)->nullable();
    $table->string(‘adress’)->nullable();
    と書くとうまく追加できました。

目次