Php Laravel 5.5雄辩-可选择链接何处语句

Php Laravel 5.5雄辩-可选择链接何处语句,php,laravel,eloquent,Php,Laravel,Eloquent,我希望发生以下情况-如果字段与“全部”不同,则按字段搜索。大概是这样的: //如果$request['field']!='“全部”添加查询 if(isset($request['types'])) { $query = Offer::whereHas('types', function ($query) use ($request) { $typeArray = $request->get('types'); $query->whereIn(

我希望发生以下情况-如果字段与“全部”不同,则按字段搜索。大概是这样的:

//如果$request['field']!='“全部”添加查询

if(isset($request['types'])) {
    $query = Offer::whereHas('types', function ($query) use ($request) {
        $typeArray = $request->get('types'); 
        $query->whereIn('type', $typeArray);
    });
}

if ($request['country'] != 'all') {
   query->where('country_id', $country);
}
最后,我想对结果进行排序和分页,如下所示:

$offers = $query->orderBy('created_at', 'desc')->paginate(9);
有没有办法做到这一点?如果我的问题不够清楚,请告诉我,我将对其进行编辑,并尝试更好地解释。

你能试试这个吗:

<?php

$query = Offer::where(function($q) use ($request){
    if ( !empty($request['country']) && is_numeric($request['country']) ) {
        $query->where('country_id', $request['country']);
    }

    if( !empty($request['types']) && is_array($request['types']) ) {
        $q->whereHas('types', function ($q) use ($request) {
            $typeArray = $request->get('types'); 
            $q->whereIn('type', $typeArray);
        });
    }
});


$offers = $query->orderBy('created_at', 'desc')->paginate(9);
你能试试这个吗:

<?php

$query = Offer::where(function($q) use ($request){
    if ( !empty($request['country']) && is_numeric($request['country']) ) {
        $query->where('country_id', $request['country']);
    }

    if( !empty($request['types']) && is_array($request['types']) ) {
        $q->whereHas('types', function ($q) use ($request) {
            $typeArray = $request->get('types'); 
            $q->whereIn('type', $typeArray);
        });
    }
});


$offers = $query->orderBy('created_at', 'desc')->paginate(9);

是否要根据请求的条件构建查询生成器?“我说得对吗?”安德索南德拉说得对。我想根据用户选择的字段建立我的查询。你能把
if($request['country']…
在匿名函数中?你想用你请求的条件构建一个查询生成器吗?我是对的?@AndersonAndrade正确。我想根据用户选择的字段构建我的查询。你能放置
if($request['country')吗…
在匿名函数中?我认为它是有效的!非常感谢Anderson!我对你的答案投了更高的票。如果一切正常,我会进一步测试它,并将你的答案标记为正确。是的,它起了作用。但是我发现@pravindabhi的解决方案更优雅、更合适。谢谢你的帮助!我认为它有效!非常感谢Anderson!我对你的答案投了更高的票答:我会再做一些测试,如果一切正常,我会将你的答案标记为正确。是的,它起了作用。但是我发现@pravindabhi的解决方案更优雅、更合适。谢谢你的帮助!这是处理像这样的简单事情的更好方法。什么时候对这些事情来说是好的、干净的。PS你确实忘记了你答案中的orderBy和paginate;)PPS我将尝试编辑您的答案,如何理解question@pravindabhi我发现你的解决方案最优雅,也最适合我的需要。将你的答案标记为正确!你能投票支持我的问题吗?谢谢你的帮助,Pravin!这是我处理像这样简单的事情的更好方法。什么时候做这样的事情是好的和干净的。PS你d忘记你的答案中的orderBy和paginate;)PPS我将尝试编辑你的答案,如何理解question@pravindabhi我发现您的解决方案最优雅,最适合我的需要。把你的答案标记为正确!你能投票表决我的问题吗?谢谢你的帮助,普拉文!