[Laravel] 자기참조 관계(self referencing relationship) 테이블의...

[Laravel] 자기참조 관계(self referencing relationship) 테이블의...

자기참조 관계

보통 자기참조 관계 테이블은 "부서정보" 같은 상하 관계를 나타내야 하는 경우 사용합니다.

상하 관계를 표현할 수 있는 방식은 여러가지가 있지만 제가 설명하는 방식은 테이블 내에 "parent_id" 라는 컬럼을 사용하여 부모정보의 "id"를 지정하는 방식입니다.

테이블 표

id name parent_id 1 최 상위 부서 null 2 하위 부서1 1 3 하위 부서2 1 4 최 하위 부서1 2

모델 생성하기

namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Department extends Model { /** 상위 부서 */ public function parent() { return $this->belongsTo('App\Department', 'parent_id'); } /** 하위 부서들 */ public function child() { return $this->hasMany('App\Department', 'parent_id'); } }

질의 방법

1. 나의 최상위 부서 찾기

$id = 10; // 나의 부서 번호 $department = \App\Department::find($id) $parent = []; // 최상위 부서 정보 while ($department->parent()->first() !== null) { $department = $department->parent()->first(); $parent = $department; } return $parent;

2. 나에게 속해있는 부서들 찾기

$id = 1; // 나의 부서 번호 $department = \App\Department::find($id); $departments = $department->child()->get(); $children = collect([]); // 하위 부서들 정보 while (!$departments->isEmpty()) { $xxx = collect([]); foreach ($departments as $child) { $children = $children->merge([$child]); $xxx = $xxx->merge($child->child()->get()); } $departments = $xxx; } return $children;

from http://webinformation.tistory.com/113 by ccl(A) rewrite - 2020-03-06 22:21:15

댓글

이 블로그의 인기 게시물

[PHP] 라라벨 루멘 DB문서 자동화

laravel-2 blade layout

laravel-1 라우트 & 뷰