2017-12-29 4 views
1

Laravel Framework에서 사용자 지정 모델 버전 관리를 구현했습니다. 데이터베이스 테이블에서 처리하는 열 몇 가지가 있습니다 : sibling_id (모델의 다른 버전을 함께 연결), version, acceptedvalidFrom입니다. 예를 들어Laravel 현재 버전의 모델 만 가져 오기

: 나는 현재의 모델로 무엇을 의미

| id | sibling_id | version | accepted | validFrom | ... | 
|----|------------|---------|----------|------------|-----| 
| 1 | 1   | 1  | 1  | 2017-12-01 |  | 
| 2 | 1   | 2  | 1  | 2018-06-01 |  | 
| 3 | 2   | 1  | 1  | 2017-12-10 |  | 
| 4 | 2   | 2  | 0  | 2017-12-28 |  | 
| 5 | 3   | 1  | 0  | 2017-12-01 |  | 

:

  • 모델 '이 외설 경우 승인 유효 조동사
  • 또는 버전 1에서 가장 큰 버전 번호를 가진 다른 버전들

sibling_id으로 그룹화 된 현재 모델 만 정상적으로 얻는 방법을 원합니다 (이 예제에서는 컬렉션에 모델 1, 3 및 5가 포함되어야합니다). 이것은 Laravel의 withTrashed() 함수와 같은 방식으로 작동해야하므로 원하는 경우 모두 포함시킬 수 있습니다 (예 : 버전 기록).

어쩌면 범위를 사용하여이 작업을 수행 할 수 있지만 "형제 그룹화"및 다른 복잡한 필터로 인해 복잡하다고 느꼈으므로 여기에서 질문했습니다.

미리 감사드립니다.

답변

0

SQL보기는 Laravel로 쿼리를 작성하기보다는 작업하기가 더 쉬울 것이라고 생각합니다.

나는 따라 쿼리 뭔가를 구현하는 뷰를 구축 할 것 :

select t.* from table as t 
    join (select sibling_id, MAX(version) as version from table group by sibling_id) as grouped 
     on grouped.sibling_id = t.sibling_id and t.version = grouped.version; 

그런 다음 Laravel에서보기 위해 다른 웅변 모델을 매핑합니다. 이렇게하면 모든 것을 얻으려면 테이블에서 선택하고 "고유 한"레코드를 원한다면보기에서 선택할 수 있습니다.