2017-12-21 22 views
0

나는 테이블 아래에있는어떻게 설득력

사용자

id 
name 

회사

id 
user_id 
name 

제품 카테고리

id 
company_id 
name 

제품

를 사용하여 Laravel의 복잡한 관계를 얻을 수 있습니다
id 
product_category_id 
name 

판매

id 
product_id 
price 
quantity 
total 

지금 내가 지정된 사용자의 제품에 대한 모든 판매를 싶어. 나는 아래 쿼리를 시도했다. 그러나 나는 이것을 위해 어디에서 사용할 수 없습니다. 이 필터는 적용되지 않습니다. 또한 내가

$sales = Sale::with(['product'=>function($q) use ($user_id) { 
     $q->with(['product_category' => function($q) use ($user_id) { 
      $q->with(['company'=> function($q) use ($user_id) { 
       $sUserName = Input::get('sUserName'); 
       $q->with(['user'=> function($q) use ($sUserName,$user_id) { 
        $q->where('id', $user_id); 
       }]); 
      }]); 
     }]); 
    }]); 

는 이러한 상황에 설득력을 사용할 수 등 ... users.user_name, products.product_name 같은 몇 가지 다른 필드로를 필터링하려면? 아니면 조인 쿼리를 사용해야합니까? 제발 조언 해주세요. 덕분에

+0

내가 당신이 판매 테이블 – madalinivascu

+0

에 사용자 ID를 추가 제안 기능은 다음 도구를 사용하여 결과를 원하는 것으로 기대 방법 콘크리트 기초, 강력한 데이터 모델링이 없어? – Ben

+0

조언 해 주셔서 감사합니다. 이제 sales 테이블의 ordered_user_id에 다른 필드가 필요합니다. 그러면 사용자의 이름을 입력하여 검색 할 수 있습니까? – LahiruTM

답변

0

이렇게 laravel eloqunt를 사용할 수 있습니다.

$ 판매 = DB :: 표 ('판매') -> 가입 ('제품', 'Sales.product_id을', '=', 'Products.id') -> ('ProductCategories'을 결합, '회사', 'ProductCategories.company_id', '=', 'enterprises.id') -> 가입 ('사용자', ' 'companies.user_id', '=', 'Users.id') -> select ('Sales. *') -> get();

0

madalinivascu 후 조언을 나는 아래와 같이 내 문제를 해결할 수 있습니다. 이제 주문한 사용자가 상품을 필터링 할 수 있습니다. 제품 이름은 &입니다.

$sUserName = Input::get('sUserName'); 
    $sProductName = Input::get('sProductName'); 
    $sFrom = Input::get('sFrom'); 
    $sTo = Input::get('sTo'); 

    $user_id = \Auth::User()->id; 


    // Show sales only for his products 
    $sales = Sale::with('sold_to_user') 
     ->whereHas('sold_to_user', function($q) use ($sUserName) { 
      if(!empty($sUserName)) $q->where('name','LIKE', "$sUserName%"); 
     })->with('product') 
     ->whereHas('product', function($q) use ($sProductName) { 
      if(!empty($sProductName)) $q->where('name','LIKE', "$sProductName%"); 
      }); 

    if(\Auth::User()->privilege!='administrator') $sales = $sales->where('user_id','=',$user_id); 


    $sales = $sales->orderBy('updated_at','desc')->paginate(100);