2017-02-15 1 views
1

두 모델 : OrderDepartment은 다 대다 관계로 결합되었습니다. 이 관계의 피벗 테이블에는 "상태"필드가 있습니다. 내 응용 프로그램 I의 UI에서 진행 Laravel 5.4 : 고급 피벗 테이블 쿼리 문제

에서 :

  • 제조 :
  • 포장을 완료 : (첨부하지/필요하지 않습니다)
  • 배송 그래서 특정 순서는 같은 보일 수 있습니다 각 부서에 대한 탭과 상태에 대한 체크 박스가 있습니다. 따라서 API는 하나의 부서 및 여러 개의 가능한 상태로 요청을 보내고 주어진 부서의 선택된 상태 중 하나와 일치하는 모든 주문을 반환 할 수 있어야합니다.

    예 질의 : /api/orders?dep=manufacturing&statuses=notStarted,inProgress중 하나은 (다른 부서의 상태에 관계없이) 제조 부서 또는 "진행" "시작하지"

    을 모든 주문을 반환해야

    여기에 내가 쓴 쿼리는이 오류를 던지고있다

    $query = Order::with("departments"); 
    $department = Request::get('department'); 
    $statuses = explode(",", Request::get('statuses', "")); 
    
    if (!empty($department)) 
    { 
        $query->whereHas('departments', function ($q) use ($department) 
        { 
         $q->where('name', $department); 
        }); 
        if (count($statuses) > 0) 
        { 
         $query->where(function ($q) use ($department, $statuses) 
         { 
          foreach ($statuses as $status) 
          { 
           $q->orWhereHas('departments', function ($q) use ($department, $status) 
           { 
            $q->where('name', $department)->wherePivot('status', $status); 
           } 
          } 
         }); 
        } 
    } 
    
    return $query->paginate(15); 
    

    :

    다음
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause' 
    

    의 관계가 정의되어

    public function departments() 
    { 
        return $this->belongsToMany('App\Models\Department', 'order_statuses')->using('App\Models\OrderStatus')->withPivot('status')->withTimestamps(); 
    } 
    

답변

0

내가 궁극적으로 이것에 다음과 같은 해결책을했다 :

if (!empty($departments) 
{ 
    if (count($statuses) > 0) 
    { 
     $query->whereHas('departments', function ($q) use ($department, $statuses) 
     { 
      $q->where('name', $department)->whereIn('order_statuses.status', $statuses); 
     } 
    } else { 
     $query->whereHas('departments', function ($q) use ($department) 
     { 
      $q->where('name', $department); 
     } 
    } 
} 
0

는 기본적으로 단지 모델 키 피벗 객체에 존재한다. 피봇 테이블 추가 속성이 포함 된 경우의 관계를 정의 할 때, 당신은 그 (것)를 지정해야합니다

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2'); 
+0

나의 관계는'withPivot'을 사용하여 정의 하였다. 전체 관계 정의로 원래 게시물을 업데이트하겠습니다. – stevendesu