いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「LaravelのEloquentでモデル間のリレーションを実装する方法を知りたい」とお考えではありませんか?
Laravelでアプリを作っていると、複数のモデルを紐づけて扱う場面が必ず出てきます。
Eloquentのリレーション機能を使えば、モデルにメソッドを1つ定義するだけで関連データを取得可能です。



仕組みを理解すればシンプルなので、サクッと解説します。
ということで、本記事ではLaravelのEloquentでリレーションを実装する方法を解説します。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【Laravel】Eloquentでリレーションを実装する方法
早速ですが、LaravelのEloquentでリレーションを実装する方法を解説します。
1対多のリレーションを定義する
まずは、1対多のリレーションを定義する方法を紹介します。
ユーザーが複数の投稿を持つケースを例に進めます。
Userモデルに、投稿一覧を取得するメソッドを定義します。
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}hasManyメソッドの引数には、関連付けたいモデルのクラス名を渡します。
Postモデルには、投稿の作成者を取得するメソッドを定義します。
class Post extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}belongsToメソッドは、外部キーを持つ側のモデルに定義します。



命名規則に沿っていれば、外部キー名やローカルキー名を省略できます。
命名規則から外れる場合は、belongsToメソッドの第2引数・第3引数で明示的に指定してください。
多対多のリレーションを定義する
次に、多対多のリレーションを定義する方法を紹介します。
例として、投稿とタグが多対多で紐づくケースを想定します。
post_tagという名前で中間テーブルを作成します。
Schema::create('post_tag', function (Blueprint $table) {
$table->foreignId('post_id')->constrained()->cascadeOnDelete();
$table->foreignId('tag_id')->constrained()->cascadeOnDelete();
$table->primary(['post_id', 'tag_id']);
});中間テーブル名は、関連する2つのモデル名をアルファベット順に並べ、単数形にしてアンダースコアでつなげる命名規則になっています。
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}Tagモデル側にも、同様にbelongsToManyメソッドを定義します。
class Tag extends Model
{
public function posts()
{
return $this->belongsToMany(Post::class);
}
}N+1問題を回避してリレーションを取得する
リレーションを定義しただけでは、N+1問題が発生する場合があります。
例えば、投稿を10件取得したあとにループ内でuserプロパティにアクセスすると、投稿数だけ追加のクエリが発行されてしまいます。



N+1問題は、Laravel Telescopeなどのデバッグツールを使うと発見しやすいです。
想定よりクエリ数が多いと感じたら、まずEager Loadingを疑ってみてください。
N+1問題を避けるには、withメソッドでEager Loadingを行います。
$posts = Post::with('user')->get();withメソッドを使うと、投稿取得時にユーザー情報もまとめて取得できるため、クエリ数を削減できます。
多対多リレーションで中間テーブルのカラムも取得したい場合は、withPivotメソッドを使います。
public function tags()
{
return $this->belongsToMany(Tag::class)->withPivot('created_at');
}withPivotメソッドの引数に、取得したい中間テーブルのカラム名を指定します。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
N+1問題とは何ですか?
リレーション先のデータを取得するたびに追加のクエリが発行され、大量のクエリが実行されてしまう問題です。
withメソッドによるEager Loadingを使うことで、クエリ数をまとめて削減できます。
中間テーブルに任意のカラムを追加できますか?
追加できます。
withPivotメソッドを使うと、中間テーブルの追加カラムをリレーション取得時に含められます。
withTimestampsメソッドを併用すると、中間テーブルのcreated_at・updated_atも自動的に管理されます。
リレーションメソッド名はテーブル名と一致させる必要がありますか?
必須ではありません。
ただし命名規則から外れる場合は、外部キー名やローカルキー名をメソッドの引数で明示的に指定する必要があります。
まとめ
今回は、LaravelのEloquentでリレーションを実装する方法について解説しました。
以下が本記事のまとめになります。
- おすすめ本
Laravelの勉強なら「PHPフレームワーク Laravel入門 第2版



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








