2017-02-05 6 views
0

Laravelにいくつかのデータを入力する際に​​問題があります。Laravelのクエリステップの最大数

私はやって私のクエリを起動し、次の:私は例$usersall = $query->whereHave_pics('1')->get(); を照会する場合

$query = User::whereRole('advertiser'); 

は、それから私はまた$querywhereの長い文字列で構成することができます0

have_picsを持っているユーザーを取得ユーザの選択に応じて動的なクエリ。これらのうちwhereクエリの中にはhave_picsに0を持つユーザーは対象ですが、whereHave_pics( '1')でクエリを終了すると、Have_picsに '1'のユーザーしか得られませんか?

laravelがクエリビルダで処理できる最大数のステップがある場合、私は疑問に思っていますか?例えば

、IけどwhereHave_pics( '1')、クエリの開始時に、このような場合:

$query = User::whereRole('advertiser')->whereHave_pics('1'); 
    /* More queries are added */ 
$usersall = $query->get(); 

が、それは完全にwhereHave_picsなくwhereRoleを無視し... もし私が

$query = User::whereRole('advertiser'); 
    /* More queries are added */ 
$usersall = $query->whereHave_pics('1')->get(); 

これは、クエリを作成するユーザーの選択にもよります。

私は、クエリモデルを変更するなど、さまざまな回避策を試しています。 whereHave_pics('1')の代わりにwhere('have_pics', '1')またはwhere('have_pics', true)など

私は次に何を試してもわかりません。


これは、問題は、あなたがどこの連鎖とorWhereはLaravelで作品を連鎖する方法を理解する必要があるユーザー

public function search_adv(Request $request, $locale = 'dk') { 

    App::setLocale($locale); 

    $hair_queries = [ 
    ['input' => 'blonde', 'operator' => '=', 'field' => 'haircolor'], 
    ['input' => 'brown', 'operator' => '=', 'field' => 'haircolor'], 
    ['input' => 'red', 'operator' => '=', 'field' => 'haircolor'], 
    ['input' => 'dark', 'operator' => '=', 'field' => 'haircolor'], 
    ]; 

    $eye_queries = [ 
    ['input' => 'green', 'operator' => '=', 'field' => 'eyecolor'], 
    ['input' => 'brown', 'operator' => '=', 'field' => 'eyecolor'], 
    ['input' => 'blue', 'operator' => '=', 'field' => 'eyecolor'], 
    ['input' => 'hazel', 'operator' => '=', 'field' => 'eyecolor'], 
    ['input' => 'silver', 'operator' => '=', 'field' => 'eyecolor'], 
    ['input' => 'amber', 'operator' => '=', 'field' => 'eyecolor'], 
    ]; 


    $query = User::whereRole('advertiser'); 

    /* HAIRCOLOR */ 
    $hair = 0; 
    foreach($hair_queries as $filter) { 
     if($hair == 0) { 
     if(!empty($request->input($filter['input']))) { 
      $query = $query->where(
       $filter['field'], 
       $filter['operator'], 
       $filter['input'] 
      ); 
     } 
     } 
     if(!empty($request->input($filter['input']))) { 
      $hair++; 
     } 
    } 

    if ($hair >= 2) { 
    foreach($hair_queries as $filter){ 
     if(!empty(request()->input($filter['input']))){ 
      $query = $query->orWhere(
       $filter['field'], 
       $filter['operator'], 
       $filter['input'] 
      ); 
     } 
    } 
    } 
    /* END HAIR COLOR */ 

    /* EYECOLOR */ 
    $eye = 0; 
    foreach($eye_queries as $filter) { 
     if($eye == 0) { 
     if(!empty($request->input($filter['input']))) { 
      $query = $query->where(
       $filter['field'], 
       $filter['operator'], 
       $filter['input'] 
      ); 
     } 
     } 
     if(!empty($request->input($filter['input']))) { 
      $eye++; 
     } 
    } 

    if ($eye >= 2) { 
    foreach($eye_queries as $filter){ 
     if(!empty(request()->input($filter['input']))){ 
      $query = $query->orWhere(
       $filter['field'], 
       $filter['operator'], 
       $filter['input'] 
      ); 
     } 
    } 
    } 
    /* END EYE COLOR */ 


    $usersall = $query->whereHave_pics('1')->get(); 

    return view('search', compact('usersall')); 
} 

答えて

1

を照会し、完全な機能は、あります。

$query->where(..a..)->orWhere(..b..)->where(..c..)->orWhere(..d..)と言うときは、それは(a || (b && c) || d)と評価されます。 ((a || b) && (c || d))を意図しているか、((a && c) || b || d)を意図している可能性があります。これは、なぜ高度なwhere節が必要な場合に、どこでクロージャを使用するかを指定する理由です。parameter grouping

+0

わかりました。どこのクロージャのソースがありますか?簡単なGoogle検索では何も出てこなかった – Patrick

+0

投稿内のパラメータグループリンクをクリックしてください。 – Paras

+0

さて、私はそれを見ましたが、別のものだと思っていました。 – Patrick