2016-03-18 38 views
1

whereHas Laravel中的方法使用来自MySQL的EXISTS。问题是,当例如品牌和文字指定的时候,所有带品牌或不带品牌的文字都存在于文字中......但是,当品牌指定它时,只需要带有品牌和文字的品牌。 $ parts = AutoPart \ Part :: has('classifier') - > with(['details','classifier','order','place']) - > orderBy('id','desc');有没有什么可以严格的在Laravel的方法?

if ($brand = $request->get('brand', FALSE)) { 
    $parts->whereHas('details', function($query) use($brand) { 
     $query->where('brand', '=', $brand); 
    }); 
} 

if ($model = $request->get('model', FALSE)) { 
    $parts->whereHas('details', function($query) use($model) { 
     $query->where('model', '=', $model); 
    }); 
} 

if ($text = $request->get('text', FALSE)) { 
    if (strlen($text) > 0) { 
     $parts->whereHas('details', function($query) use($text) { 
      $query->where('notes', 'LIKE', '%' . $text . '%'); 
     }); 

     $parts->orWhereHas('classifier', function($query) use($text) { 
      $query->where('name', 'LIKE', '%' . $text . '%'); 
     }); 
    } 
} 

回答

1

更改的最后一个条件

if ($text = $request->get('text', FALSE)) { 
    if (strlen($text) > 0) { 

     // This will put a bracket around the whereHas and the OrWherehas 
     $parts->where(function($q) use($text) { 
      $q->whereHas('details', function($query) use($text) { 
       $query->where('notes', 'LIKE', '%' . $text . '%'); 
      }); 

      $q->orWhereHas('classifier', function($query) use($text) { 
       $query->where('name', 'LIKE', '%' . $text . '%'); 
      }); 
     }); 

    } 
} 

希望它有助于

相关问题