我想通过选定的不同参数获取查询
但现在它只是单独过滤。这是我的 Controller :
$cityId = $request->input('city_id');
$category = $request->input('categories');
$search = $request->input('search');
if(isset( $cityId) || isset($category) || isset($search )){
$companies = \App\Company::orWhere('city_id', '=', $cityId)
->orWhereHas('categories',
function ($query) use ($category) {
$query->where('id', $category);
})->orWhere('name', '=', $search)
->get();
}else{
$companies = \App\Company::all();
}`
现在,如果我选择城市和类别工作正常,但如果我还搜索名称,它应该只从城市/类别列表中为我提供该公司名称或为空。
我的 View 如下所示:
`{!! Form::open([ 'action' => 'HomePageController@index', 'method' => 'get']) !!}
<div class="container">
<div class="col-xs-2 form-inline">
{!! Form::label('city_id', trans('quickadmin.companies.fields.city').'', ['class' => 'control-label']) !!}
{!! Form::select('city_id', $cities, old('city_id'), ['class' => 'form-control select2']) !!}
</div>
<div class="col-xs-3 form-inline">
{!! Form::label('categories', trans('quickadmin.companies.fields.categories').'', ['class' => 'control-label']) !!}
{!! Form::select('categories', $categories, old('categories'), ['class' => 'form-control select2']) !!}
</div>
<div class="col-xs-3 form-inline">
{!! Form::label('search', trans('quickadmin.companies.fields.name').'', ['class' => 'control-label']) !!}
{!! Form::text('search', old('search'), ['class' => 'form-control', 'placeholder' => 'Search']) !!}
<p class="help-block"></p>
</div>
<div class="form-inline">
<div class="col-xs-2">
<button type="submit"
class="btn btn-primary">
Search
</button>
</div>
</div>
</div>
{!! Form::close() !!}
</div>
<br>
@if (count($companies) > 0)
@foreach ($companies as $company)
<div class="container">
<div class="row">
<div class="col-xs-2">@if($company->logo)<a href="{{ asset(env('UPLOAD_PATH').'/' . $company->logo) }}" target="_blank"><img src="{{ asset(env('UPLOAD_PATH').'/thumb/' . $company->logo) }}"/></a>@endif </div>
<div class="col-xs-10">
{{$company->name}}
<br>
{{$company->address}}, {{ $company->city->name or '' }}
<br>
@foreach ($company->categories as $singleCategories)
<span class="label label-info label-many">{{ $singleCategories->name }}</span>
@endforeach
<br>
{{$company->description}}
<hr>
</div>
</div>
</div>`
最佳答案
由于您使用的是 orWhere
,因此还会返回搜索查询中未包含的名称。由于您说您只需要在搜索字段中输入名称的公司,这似乎不是所需的行为。
改变
orWhere('name', '=', $search)
到
where('name', '=', $search)
关于php - 如何使用不同选项进行查询 laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528770/