はじめに
以下の記事は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』側となる
参考文献