티스토리 뷰

반응형

Laravel 11에서 Eloquent ORM은 관계형 데이터베이스의 테이블 간 연관 관계를 쉽고 직관적으로 처리할 수 있도록 도와줍니다. Laravel 10과 거의 동일한 방식으로 작동하지만, Laravel 11에서는 더 깔끔한 문법과 일부 향상된 기능이 포함되어 있을 수 있습니다.

아래는 Laravel 11에서 사용할 수 있는 Eloquent의 주요 연관관계(relationships) 들입니다:


🔹 1. One To One (1:1)

// User 모델
public function phone()
{
    return $this->hasOne(Phone::class);
}

// Phone 모델
public function user()
{
    return $this->belongsTo(User::class);
}

🔹 2. One To Many (1:N)

// Post 모델
public function comments()
{
    return $this->hasMany(Comment::class);
}

// Comment 모델
public function post()
{
    return $this->belongsTo(Post::class);
}

🔹 3. Many To Many (N:N)

// User 모델
public function roles()
{
    return $this->belongsToMany(Role::class);
}

// Role 모델
public function users()
{
    return $this->belongsToMany(User::class);
}

⚠️ pivot 테이블은 기본적으로 role_user 형태로 생성되고, 중간 테이블의 키는 알파벳 순 정렬됩니다 (role_id, user_id).


🔹 4. Has One Through / Has Many Through

// Country → HasManyThrough → Post (중간 모델: User)
public function posts()
{
    return $this->hasManyThrough(Post::class, User::class);
}

🔹 5. Polymorphic (다형성 관계)

📌 One to Many Polymorphic

// Post, Video 모델
public function comments()
{
    return $this->morphMany(Comment::class, 'commentable');
}

// Comment 모델
public function commentable()
{
    return $this->morphTo();
}

📌 Many to Many Polymorphic

// Post, Video 모델
public function tags()
{
    return $this->morphToMany(Tag::class, 'taggable');
}

// Tag 모델
public function posts()
{
    return $this->morphedByMany(Post::class, 'taggable');
}

public function videos()
{
    return $this->morphedByMany(Video::class, 'taggable');
}

💡 추가 팁

  • 관계 호출 시 lazy loading, with()으로 eager loading, load()로 이미 로드된 모델에 eager loading도 사용할 수 있어 성능 최적화 가능
  • withCount(), withSum() 등도 활용 가능
반응형

'배움 > PHP' 카테고리의 다른 글

PHP strict_types 기능  (0) 2025.04.29
PHP collect 함수와 예제들  (0) 2025.04.28
PHP HTML parser 방법  (0) 2025.04.17
Laravel 11 라라벨 스케줄링(Scheduling)  (0) 2025.04.16
Lavavel Console Command Argument 옵션  (0) 2025.04.15
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함