2017-12-18 18 views
1

내가 두 개의 테이블이 있다고 가정하자 (기존 관계없이 요소를 포함)와 관련된 테이블 값에 정렬. 나는 관계 값을 기준으로 정렬 할 때이 조인을 사용한다는 것을 알고

$organisationsModel -> join('users', 'organisations.id', '=', 'users.organisationId', 'left') 
    -> select('organisations.*', 'users.name as userName') 
    -> where('users.type', 1) 
    -> where('users.deleted', 0) 
    -> orderBy('userName', 'ASC); 

을하지만, 그것은 단지 (0으로 설정 삭제 된과) 유형 1의 사용자가있는 조직을 보여주고, 내 질문은 : 내가 할 수있는 적절한 사용자가 연결되어 있지 않은 채로이 값을 반환하도록이 쿼리를 수정 하시겠습니까? 당신은 왼쪽 필요

+0

모든하려는 예상 출력은 무엇에 의해 조건 순서를 사용할 수있는 결과를 주문하려면 모든 조직을 얻기 위해 추가로 가입 조항에 합류 유형이 1인지 여부는 사용자가 먼저 유형 1을 가진 사용자를 분류 한 다음 다른 사용자를 분류합니까? –

+0

사용자 (유형 1, 삭제 된 0)별로 정렬 된 모든 조직을 항상 원합니다. 조직에 적절한 사용자가 연결되어 있지 않은 경우 사용자 이름을 빈 문자열로 에뮬레이션해야합니다. – Gieerzetka

답변

1

당신이 절

$organisationsModel->leftJoin('users', function ($join) { 
            $join->on('organisations.id', '=', 'users.organisationId') 
             ->where('users.type', 1) 
             ->where('users.deleted', 0); 
        }) 
        ->select('organisations.*', 'users.name as userName') 
        ->orderByRaw('CASE WHEN users.type = 1 AND users.deleted = 0 THEN 1 ELSE 0 END DESC') 
        ->orderBy('userName', 'ASC); 

Another similar problem

+1

감사합니다. 나는 당신의 코드를 조금 바꿨다. (fe. first join은 불필요하다.)하지만 작동한다. – Gieerzetka