忘備録
環境
- Windows 10 Home
- PHP 7.4 (XAMPP)
- Laravel 6.18.20
- PHP ビルトインサーバーでの開発
最初に
カラム名を変更するということはそのカラムを参照するコードも編集しなければいけない。
あとカラム名を変更するにあたって必要なライブラリも必要。
ということでこれは絶対忘れるので忘備録。
追記:もっと簡単な方法があったので一番下に追記しておきます。
やり方
Step. 1 コマンドラインで色々
# 必要なライブラリを入れる
composer require require doctrine/dbal
# 新しいマイグレーションファイルを作る
php artisan make:migration rename_name_to_username_on_users_table --table=users
上のコマンドについて詳しく知りたい
doctrine/dbalについては僕もまだあまり知らないので詳しくは言えませんが、PDOをもっと使いやすくしたやつらしいです。 まあ、もっと知りたい方は⇒[ググリンク](https://www.google.com/search?q=Doctrine%20DBAL%20%E3%81%A8%E3%81%AF)下のコマンドについて詳しく知りたい
データベースのカラム名を変更するマイグレーションファイルを作るにはどうやら`rename_元のカラム名_to_新しいカラム名_on_テーブル名_table`と言う名前にするといいらしいので、`rename_name_to_username_on_users_table`としました。 `--table=users`とありますが、これを書いておくと、ある程度usersテーブルをいじることを前提に書かれた状態のマイグレーションファイルが生成されます。_(Laravel優しい)_Step. 2 カラム名を変更する
その為には…
Step. 2-1 マイグレーションファイルを編集
database/migrations/XXXX_XX_XX_XXXXXX_rename_name_to_username_on_users_table.phpを編集 (Step. 1の下のコマンドでファイルが追加されています)
- 1つ目の
//を$table->renameColumn('name', 'username');に置き換え。 - 2つ目の
//を$table->renameColumn('username', 'name');に置き換え。
詳しく知りたい(別に詳しくない)
コード自体はそのままrenameColumn⇒カラムの改名ですね。左から右に改名されます。 最初に入れた`doctrine/dbal`ってやつでやってます。Step. 2-2 migrateしてカラム名を変更
php artisan migrate
データベースを確認して成功したら次に進めます。
Step. 3 コントローラーの修正
Step. 3-1 ログインコントローラーの修正
app/Controllers/Auth/LoginController.phpを編集
- LoginControllerに以下のようなよくわからんメソッドを追加。
public function username()
{
return 'username';
}
Step. 3-2 新規登録コントローラーの修正
app/Controllers/Auth/RegisterController.phpを編集
-
Validator::makeにある配列の'name'を'username'に変更 -
User::createにある配列の'name'を'username'に変更
(注: こっちは値の方も変更する $data['name']⇒$data['username'])
Step. 4では合計3か所変更する場所がありました。
Step. 4 テンプレートファイルの修正
Step. 4-1 会員登録画面の修正
resources/views/auth/register.blade.phpを編集
変更前
// 省略 (この上にはformの開始タグと@csrfってやつがあります) //
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</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>
// 省略 (この下にはメールアドレスの関連のものがあります) //
変更後
// 省略 (この上にはformの開始タグと@csrfってやつがあります) //
<div class="form-group row">
<label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="username" type="text" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus>
@error('username')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
// 省略 (この下にはメールアドレスの関連のものがあります) //
まあ適当にnameをusernameに書き換えただけですね。
注意点として、__('Name')は面倒なのでそのままにしておいた方が良いです。
気になる方は中身をUsernameに変えた後
resources/lang/ja.jsonに
{
"Username": "ユーザー名"
}
を追加してください。
Step. 4-2 ユーザー名を使う部分の編集
このままだとログイン後、ヘッダーに出てくるユーザー名が消えます。
ということで直しましょう。
デフォルトならresources/views/layouts/app.blade.phpです。
エディタの検索機能または置換機能でAuth::user()->nameを検索し、Auth::user()->usernameに置き換えてください。
おわり
お疲れさまでした!終わりです。
自分でカスタマイズしたりページを増やしている箇所がある場合上記の内容を参考に修正すればできるはずです。
ありがとうございました。
参考にした記事
laravel migration カラム名変更(初心者向け)
余談
Qiitaの<details>もうちょっと汎用性上げてほしい
追記
xxx_create_users_table.phpの$table->string('name');というのを$table->string('username');としてあげても変えることができます。