Laravel8 リレーション
Laravel初学者です。
オリジナルアプリを作成しているのでその過程を記事にしています。
理解が曖昧なところも多いため、ご指摘等ありましたらご連絡いただければ幸いです。
今回はリレーションについて勉強したのでそのまとめです。
自分用メモです。
環境
Version | |
---|---|
PHP | 7.4.14 |
Laravel | 8.24.0 |
mysql | 8.0.23 |
docker | 20.10.2 |
docker-compose | 1.27.4 |
参考
こちらから勉強させていただきました。
翻訳してくれてありがたい。。。
今回の設定
- Phoneモデル
- Userモデル
こちらの2つが存在しいろいろな場合で定義します
1対1
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function phone()
{
return $this->hasOne(Phone::class);
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
上記のようにそれぞれモデルに定義します。
1対1の関係ってどちらがhasOneで、どちらがbelongsToか分かりにくいので
私は
親=それが存在しないとそもそも子も存在しないモデルが親
子=自分が消えても親は消えないモデルが子
というように覚えてます。
つまり今回の場合でいうとUserモデルが親でPhoneモデルが子です。
例えば
投稿に対してコメントできる機能があった時には
- 投稿が消えたらその投稿に対するコメントも消えるべき
- コメントはそもそも投稿が存在しないとそのコメントは存在しない
ということを踏まえると投稿が親でコメントが子です。
分かりにくい。。。
DB設計って難しい。
1対多
UserはたくさんのPhoneを持っている関係です。
User:1
Phone:多
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function phones()
{
return $this->hasMany(Phone::class);
}
}
ここで注意なのはphones
と複数形になっていることです。
たくさんのphoneなので複数と覚えました。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
今回はuserは1なので単数形です。
1つのphoneを持つのはは1人のuserしか存在しないということです。
Author And Source
この問題について(Laravel8 リレーション), 我々は、より多くの情報をここで見つけました https://qiita.com/mumucochimu/items/d1bb5385d7e441ea29b0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .