Laravelのリレーションの説明を読むと、1対1の時はhasOne()で1対nの場合はhasMany()でとか、ER図書いて説明とか、それは分かったから実際それらの関数は自動で何をしてくれてるのよ??
ってよく思ったのでメモ
■hasOne(), hasMany()
ユーザ(users)から電話(phones)を求めるような場合
usersテーブル phonesテーブル
id ———-┐ id
└——–> user_id
ポイントは3つ
$this->hasOne(Phone::class)
①(user) ②(phone)
③(_id)
①テーブルのid = ②テーブルの①+③カラムのレコードを取得
user phone user_id
hasMany()でも考え方は同じ
・返り値がModel型かCollection型かの違いだけ
つまり、1レコードか複数レコードが返ってくるかの違い
・phonesに一致するレコードが複数存在してhasOne()を使っても1レコード返ってくるだけでエラーにはならない
■belongsTo()
電話(phones)から持ち主(users)を求めるような場合
phonesテーブル usersテーブル
id ┌———— id
user_id ——-┘
同じようにポイントは3つ
$this->belongsTo(User::class)
①(phone) ②(user)
③(_id)
①テーブルの②+③カラム = ②テーブルのidカラムのレコードを取得
phone user_id user
仕組みはこれだけのこと!!
ちなみにカラム名が命名規則に従っていなくても
hasOne(),hasMany(),belongsTo()のパラメータで指定出来る。
belongsToMany()は、n対nになるので、間に1つテーブルを挟むが
上記の3つが理解出来れば大丈夫だと思う
これ!私も帰ってきたデータの違いや仕組みがイマイチ曖昧だったので、これからすっごく役立つとおもいます。
今、管理画面の見た目にしか着手できてないけど、これができればDB関係もきちんと理解をふかめねば。。。
ありがたい記事第何弾??4弾くらいかな。笑
ありがとうございます。
お役に立てるような記事を書けるよう頑張ります!