将2个Laravel查询结果合并到一个对象中

时间:2018-01-04 10:55:27

标签: php laravel object

我发现了很多类似的问题但没有真正的解决方案。 我有一个关于Laravel 5.4的项目 现在,在我的控制器中,我正在为我的搜索准备过滤器。
所以,想象一下,我想通过我的Cv模型的“位置”和“关于”字段来过滤我的搜索。

所以,我发现每个人都有不同的价值

    $arrOfTags = explode(',', $request['position']);
 //separate basic search request(using some js modules that return a request with "," separator.
    //Basically, find a Cv where location of "positions" is distinct
    $filter0 = Cv::select('location')
                ->whereIn('position', $arrOfTags)
                ->groupBy('location')
                ->get();
    $filter1 = Cv::select('about')
                ->whereIn('position', $arrOfTags)
                ->groupBy('about')
                ->get();

现在,我想在名为$filters

的对象中合并这2个结果

然后,在我的Blade中使用它:

@foreach($filters as $filter)
    <li> <input type="checkbox" name="location" value="{{$filter->location}}"/> <span> {{$filter->location}} </span> </li> 
@endforeach

@foreach($filters as $filter)
    <li> <input type="checkbox" name="location" value="{{$filter->about}}"/> <span> {{$filter->about}} </span> </li> 
@endforeach

我尝试了array_merge对象,创建了一个新的空对象并设置了这个对象和其他东西的参数,但没有成功。

4 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用unique()收集方法。获取数据:

$filters = Cv::select('location', 'about')
    ->whereIn('position', $arrOfTags)
    ->get();

为每列获取唯一值并使用结果:

@foreach($filters->unique('location') as $filter)
    <li> <input type="checkbox" name="location" value="{{ $filter->location }}"/> <span> {{$filter->location}} </span> </li> 
@endforeach

@foreach($filters->unique('about') as $filter)
    <li> <input type="checkbox" name="about" value="{{ $filter->about }}"/> <span> {{ $filter->about }} </span> </li> 
@endforeach

答案 1 :(得分:0)

您只需使用merge方法合并two个集合即可。 merge方法将给定的数组或集合与原始集合合并。试试这个 -

    $filters =  $filter0->merge($filter1);

有关详细信息,请参阅官方laravel documentation

答案 2 :(得分:0)

你为什么只是把它收集起来?

$locationFilters= Cv::select('location')
            ->whereIn('position', $arrOfTags)
            ->groupBy('location')
            ->get();

$aboutFilters= Cv::select('about')
            ->whereIn('position', $arrOfTags)
            ->groupBy('about')
            ->get();
return view('view name',compact('locationFilters','aboutFilters'));

然后在你看来:

@foreach($locationFilters as  $filter)
     <input value="{{$filter->location}}"/>
@endforeach

@foreach($aboutFilters as $filter)
     <input value="{{$filter->about}}"/>
@endforeach

答案 3 :(得分:0)

在服务器端,您可以将其作为

$filters[] = $filter0->location;
$filters[] = $filter1->about;

在视图上,只需打印数组的值而不是访问对象。