php - 如何使用不同选项进行查询 laravel

标签 php mysql laravel

我想通过选定的不同参数获取查询

但现在它只是单独过滤。这是我的 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>`

companies table

categories table

enter image description here

最佳答案

由于您使用的是 orWhere,因此还会返回搜索查询中未包含的名称。由于您说您只需要在搜索字段中输入名称的公司,这似乎不是所需的行为。

改变

orWhere('name', '=', $search) 

where('name', '=', $search)

关于php - 如何使用不同选项进行查询 laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528770/

相关文章:

mysql - 这个查询可以吗? (SQL 中的多个 JOIN)

Laravel 4 除了 Home 之外的所有路由都会导致 404 错误

php - ActiveRecord 插入空字段 Yii2

php - Wordpress Javascript 文件 SRC 文件路径

php - 使用 php 导出数据库时出现严格标准错误

php - 打印模板中的记录

PHP上传图片失败

php - 仅格式化 PHP 生成的 HTML 表中的一列

laravel - 使用 Laravel 进行多字段的 Elastic Search

javascript - 是否可以使用 jQuery 过滤已获取的数据