我有一个控制器动作的数组。
$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'
答案 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'];