0
0

'user_id'としない場合のmigration・modelの俺的まとめ

Last updated at Posted at 2024-02-07

個人的に頭にまとまったので忘備記録として、

migration側

$table->foreignId()の中に普通は'親テーブル名_id'として外部キー設定をすると、'親テーブル名_id'が子のcolumnとして認識されると同時に、親と子で親テーブルIDと'親テーブル名_id'のcolumnが自動的に紐づくため、楽ちん。

テーブルが自動的に認識され、user_id = 親のID が自動で認識されるパターン

$table->foreignId('user_id')->constrained();

がしかし、foreignId('user1')などcolumnを好きな名前にしたい!とすると上記のルールは通用しなくなり、laravel上でどのテーブルと接続するのかわからなくなる。そこで任意のcolumn名を付ける場合は、constrained()の引数の中に親のテーブル名を入力してlaravel側に認識させる必要がある。

$table->foreignId('user1')->constrained('users');
$table->foreignId('子のcolumn名として付けたい名前')->constrained('親テーブル名');

model側

上記コードで親テーブルは認識したが、user1とどの親のテーブルのcolumnsと紐づくかまだ設定していない。そのため、model上でuser1とどの親のcolumnsとidを一致させるか設定しなければならない。
ここで親のテーブル主IDと紐づけるか、親テーブルの他のcolumnと紐づけるかでmodelの書き方が異なる。

親の主IDに紐づけるパターン

public function firstUser (){
return $this->belongsTo(Parent::class, 'user1') //(親のエロクワントモデル、親と紐づける子のcolumn名)
}
ようは第三引数にわざわざ親のid columを設定しなくても勝手にuser1 = 親のIDと認識してくれる。

親テーブルの他のcolumnsに紐づけるパターン

public function firstUser (){
return $this->belongsTo(Parent::class, 'user1', 'hoge') //(親のエロクワントモデル、親と紐づける子のcolumn名, 親テーブルが持つcolumn名)
}
単純に、user1 に親テーブルのどのcolumnを紐づけますか?というのを設定しているに過ぎない。(ここでは 子テーブルのcolumn'user1'と親テーブルのcolumn'hoge')が繋がったことを意味している。

誤字脱字修正

0
0
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
0
0