두 모델 : Order
및 Department
은 다 대다 관계로 결합되었습니다. 이 관계의 피벗 테이블에는 "상태"필드가 있습니다. 내 응용 프로그램 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(); }
나의 관계는'withPivot'을 사용하여 정의 하였다. 전체 관계 정의로 원래 게시물을 업데이트하겠습니다. – stevendesu