在拉拉维尔有什么方法可以严格的方法吗?

时间:2016-03-18 13:42:55

标签: php laravel laravel-5.2

Laravel中的

whereHas方法使用MySQL的EXISTS。问题在于,当例如品牌和文字被指定时,它会带有所有带有或不带有品牌的商品,但是我需要在品牌指定的情况下只需要带有品牌和文字的商品。     $ parts = AutoPart \ Part :: has(' classifier') - > with([' details',' classifier',' order' ;,'地点']) - > orderBy(' id',' desc');

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 个答案:

答案 0 :(得分: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 . '%');
           });
       });

   }
}

希望有所帮助