Laravel查询whereIn - 显示搜索结果

时间:2018-01-12 12:56:49

标签: php sql laravel

我有一个控制器动作的数组。

$arrOfTags = $request['position'];

该数组看起来像:

['manager', 'consultant'];

接下来,我正在查询数据库中的CV,其中position是其中之一。

$query = Cv::query();
$query->whereIn('position', $arrOfTags);
...
->get();

现在的问题是: 如果$request['position'] = ['manager','consultant'];whereIn子句仅针对position = 'consultant'找到结果,而'manager'找不到结果,那么我如何能够以编程方式发现'consultant'和/或找不到结果找不到'manager'

编辑

我所有查询的代码:

$arrOfTags = explode(',', $request['position']);
$query = Cv::query();
        $query->whereIn('position', $arrOfTags)
 if($request['salary']) {
            $query->whereIn('salary', $request['salary']);
        }

        if($request['skill']) {
            $query->join('skills', 'cvs.id', '=', 'skills.cv_id')
                  ->join('allskills', 'skills.allskills_id', '=', 'allskills.id')
                  ->select('cvs.*', 'allskills.name AS skillName')
                  ->whereIn('skills.allskills_id', $request['skill']);
        }

        if($request['language']) {
            $query->join('languages', 'cvs.id', '=', 'languages.cv_id')
                  ->join('alllanguages', 'languages.alllanguages_id', '=', 'alllanguages.id')
                  ->select('cvs.*', 'alllanguages.name as languageName')
                  ->whereIn('languages.alllanguages_id', $request['language']);
        }

        $cvs = $query->distinct()->get();
  

想象一下,$ arrOfTags值为['manager', 'consultant', 'sales']

     

我想以某种方式发现找到position =的结果   manager and consultant找不到position = 'sales'

3 个答案:

答案 0 :(得分:1)

您可以从DB加载数据:

$cvs = CV::....;

然后使用partition()方法:

list($manager, $consultant) = $cvs->partition(function ($i) {
    return $i['position'] === 'manager';
});

where()方法:

$manager = $cvs->where('position', 'manager');
$consultant = $cvs->where('position', 'consultant');

partition()where()都不会对DB执行任何其他查询。

答案 1 :(得分:1)

你也可以这样做:

$managers = $collection->search(function ($item, $key) {
  return $item['position'] === "manager";
});

$consultants = $collection->search(function ($item, $key) {
  return $$item['position'] === "consultant";
});

答案 2 :(得分:0)

您可以使用count()

if(($query->count)==($query->where('position','consultant')->count())){
      ///all are coming for position=consultants
}

或者您可以使用groupBY -

$query = $query->groupBy('position')->toArray();

retrieve由 -

$consultants = $query['consultant'];