[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
댓글
댓글 쓰기