2015-01-18 6 views
0

저는 Laravel을 처음 사용하면서 복잡한 웅변 쿼리를 만들려고 노력하고 있습니다. 그러나 나는 그것을 할 수있는 방법을 찾지 못했습니다! 이것은 멀티 벤더 상점 구조를 사용하고 있습니다. Laravel 쿼리 구조

나는 다음과 같은 모델이 있습니다

사용자가 많은 제품을 가지고
제품
주문 사용자

사용자는 자신을 가질 수에 속한 주문하기 위해 많은 OrderItem에
OrderItems에 속해있다 제품 및 사용자는 자신의 주문을 가질 수도 있습니다. 각 주.에는 여러 주. 항목이 있으며, 각 주. 항목에는 연관된 하나의 제품이 있습니다. 이것은 내가 원한다면 내가 할 수있는 방법을 내가 필요로하는 정보 나 모두를 제공하지만

Order::with('OrderItems', 'OrderItems.Product', 'OrderItems.Product.User') 
    ->whereUser_id($this->user_id)->first(); 

:

나는 다음을 수행 할 수있는 단일 주문 객체를 다시 전달하여 그것을 얻을 할

역순으로 똑같은 정보, 예를 들어, 뭔가 같은 ...

User::with('Products', 'Products.OrderItem', 'Products.OrderItem.Order') 
    ->where('Order.order_id', '=', 1)->get(); 

누군가가이 작업을 수행하는 올바른 방법의 방향으로 날 포인트? DB::Raw으로 시도했지만 분명히 객체가 아닌 플랫 응답을 반환합니다. 이것이 현재이 목표를 달성하는 가장 좋은 방법입니까?

User::with(['Products.OrderItem.Order' => function($q){ 
    $q->where('Order.order_id', 1); 
}]) 
->whereHas('Products.OrderItem.Order', function($q){ 
    $q->where('Order.order_id', 1); 
}) 
->get(); 

with() 열망로드는 ID 1과 whereHas와 주문이 모두 걸러 것이다 : 만약 당신이 원하는 그러나 당신이 (폐쇄 포함) with()의 조합 whereHas()을 사용할 수 있는지

+0

두 번째 쿼리가 작동하지 않습니까? 그런데'Order :: with ('OrderItems.Product.User')'로 충분하다. – lukasgeiter

+0

달성하고자하는 것을 알려주십시오. 이제 첫 번째 쿼리에 대해 구체적이지 않고 두 번째 쿼리에 대해 언급하지 않습니다. 'join '이 없기 때문에 후자는 작동하지 않을 것이므로'users'를 질의 할 때'orders' 테이블을 참조 할 수 없습니다. –

+0

lukasgeiter - 두 번째 쿼리가 작동하지 않습니다. 단지 내가 얻으려고하는 것의 표시입니다. – Chloe

답변

0

확실하지 않음 ID가 1 인 주문이없는 사용자

+0

아, 이해하기 때문에 두 단계 과정이 있습니다. with를 사용하여 모든 데이터를 가져온 다음 whereHas를 사용하여 필터링합니다. 나를 위해 with 메서드는 작동하지만 whereHas는 첫 번째 관계를 제외한 모든 것을 제거 할 때만 작동합니다. '$ 사용자 :: = 사용자 (배열 ('Products.OrderItems.Order '=> 함수의 ($ Q)와 { \t \t \t $ Q-> ('orders.id ', 4) \t \t})) \t \t -> 여기서 '제품', 기능 ($ q) { \t \t \t $ q-> 여기서 ('제품.id ', 92); \t \t}) \t \t -> 얻을(); ' 그것 던지는'쿼리 \ 빌더 :: Products.OrderItems.Order()가' 지금까지 당신의 도움을 주셔서 감사합니다 \ 정의되지 않은 메서드를 분명히 \ 데이터베이스에 전화, 그게 내 이해 많이 도와 줬어! – Chloe

+0

Laravel 설치를 업데이트하십시오 ('composer update'). 최근에 whereHas가 추가 된 중첩 관계 지원. – lukasgeiter

+0

아, 덕분에 lukasgeiter, 나는 [이 답변에]에서 볼 수 있습니다 (http://stackoverflow.com/questions/23153678/eloquent-with-nested-wherehas)에서 @ Jarek 그 이유는 무엇입니까 dev에 여전히 지금 당장 가지고있어. 도움 주셔서 감사합니다! – Chloe