2016-11-14 3 views
0

스코프를 사용하여 오늘 생일을 가진 사용자를 선택하는 것과 같은 기본 모델 관련 쿼리를 수행 할 수 있습니다. 스코프는 Eloquent Models에 명시되어 있으며 Eloquent Query Builder 인스턴스를 반환합니다. 하지만 더 복잡한 쿼리를 수행해야하는 경우 전자 메일 유형별로 대규모 전자 메일 로그 테이블을 그룹화하고 사용자 및 전자 메일에 가입하고 일부 집계를 적용하는 방법은 무엇입니까? 쿼리의 결과 필드가 혼합되어 있으므로 (전자 메일, 전자 메일 유형, 사용자, 로그 필드) 데이터베이스 쿼리 작성기를 사용해야합니다. 나는 빌더에게 전화하기에 가장 좋은 곳을 생각하는 것을 주저하고 있습니다. 오히려 필요한 서비스에 같은 물건을 배치Laravel의 데이터베이스 쿼리 작성 도구를위한 장소

class ConcreteModel extends Model { 

     public static function someQuery(): \Illuminate\Database\Query\Builder { 
     return \DB::table('some_table')->join('something'); 
     } 

    } 

아니면 :

내가 다른 테이블을 조인의 주요 모델의 정적 방법이 될 수 있습니까?

+0

컨트롤러 또는 서비스는 이러한 쿼리에 적합 할 수 있습니다. – linuxartisan

+0

@linuxartisan 비즈니스 로직을 컨트롤러에 혼란스럽게하는 것이 두렵습니다. 그래서 모델 대신 소비하는 서비스에 쿼리를 배치해야한다고 생각합니다. – Sergey

+0

저장소 패턴을 사용하지 않는 이유는 무엇입니까? 비즈니스 로직과 데이터 구조를 위해 레이어를 쉽게 분리 할 수 ​​있습니다. –

답변

0

그럼 복잡한 쿼리를 캡슐화하기 위해 Visitor 패턴을 사용하는 아이디어를 생각해 냈습니다. Visitor 객체는 구체적인 쿼리를 캡슐화하고, 능숙한 모델은 클라이언트가 전달한 방문자를 받아 들일 수 있고 방문자에게 자신을 전달하는 표준 메서드를 호출하고 방문자의 결과를 클라이언트에 반환하는 StdClass 컬렉션을 넘겨 줄 수 있습니다. 그것이 나를 위해 잘 될 것 같습니다.