0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelのテーブルリレーションにおける1対多の関係について

Last updated at Posted at 2024-10-01

はじめに

以下の記事はLaravelでリレーション関係を構築した際に手順をまとめたメモになります

1対多のリレーション設定について

  • 外部キーが存在するテーブルはリレーションの 「多」 に相当します

  • 外部キーで参照されるテーブルはリレーションの 「1」 になります

例題

商品情報を扱うproductsテーブルとカテゴリの情報を扱うcategoriesテーブル存在します。2つのテーブルはリレーションの関係にあるとします

categoriesテーブル(1)

id name description
1 食品 食品カテゴリ
2 家電 家電カテゴリ

productsテーブル(多)

id name price category_id
1 1000 1
2 テレビ 50000 2
3 パン 200 1
  • 上記の例では、「米」と「パン」はどちらも「食品カテゴリ」に属しています
  • 一方で「テレビ」は「家電カテゴリ」に属し、category_idが2です

モデルのリレーション定義

  • Categoryモデルは「1対多」を表すため、hasManyメソッドを使います
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Product;

class Category extends Model
{
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

  • Productモデルは「多対1」を表すため、belongsToメソッドを使います
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Category;


class Product extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

これにより、各モデル間で正しくリレーションを設定でき、データベースから関連するデータを簡単に取得することができます。

多対多の場合

まとめ

テーブルに外部キーがある場合、そのテーブルはリレーションの『多』側となり、外部キーで参照しているテーブルが『1』側となる

参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?