【问题标题】:How to do a Search By Category and Area using Laravel如何使用 Laravel 按类别和区域进行搜索
【发布时间】:2018-10-03 14:00:55
【问题描述】:

我希望能够通过用户所属的类别以及他们所在的区域来搜索用户。

我有 4 张桌子,其中包括,

一个包含 id、name、surname、email、phone、type、photo 和 area_id 的 User 表。

带有id、名称、描述的类别表

带有 id、name、description 和 category_id 的 Service 表。

并且我在服务和用户之间有一个名为 service_user 的数据透视表,其属性为 id、name、price、description、user_id 和 service_id。

如果所有信息都存在于使用 Laravel 的数据库中,我想知道如何按用户的类别和区域搜索用户。我已经设法单独按区域进行搜索并且它有效。刚刚剩下的类别,我不知道为什么它不工作或到底要做什么,因为在我的数据库中,类别 id 迁移到服务表,service_id 与 user_id 一起迁移到数据透视表(service_user)。因此,用户和服务之间是多对多的关系。

在我的网络文件中,我有这个

Route::get('/search', 'UserController@search')->name('search');

在我的用户控制器中,我做了这样的事情

  public function search(Request $request) {
    $category = $request->get('category');
    $area = Input::get('area');

    //dd($category);
    //dd($area);

    // $p = $town->id;
    // $v = Input::get('town.$town->id');
    //$va = $request->getPathInfo();

    if(!(empty($category)) && !(empty($area))) {
        $results = User::with(['area', 'services', 'category'])
            ->where('services.category.category_id', 'like', "%$category%")
            ->where('area_id', 'like', "%$area%")
            ->get();

        //Section::inject('title','Search');
       // dd($results);
        return view('Search.search', compact('results'));
    }
   elseif (!(empty($category)) && empty($area)) {
        $results = User::with(['area', 'services'])
            ->where('services.category.category_id', 'like', "%$category%")
            ->get();
        //dd($results);

        return view('Search.search', compact('results'));
    }
     elseif(empty($category) && !empty($area)) {
        $results = User::with(['area', 'services'])
            ->where('area_id', 'like', "%$area%")
            ->get();
        //dd($results);
        return view('Search.search', compact('results'));
    }

    return view('Users/jobberlist');
}

在带有搜索表单的主页中,我这样做了

<form action= "{{ route('search') }}" method="GET">
    <div class="row">
        <div class="col-lg-7 col-md-5 col-sm-5 col-xs-12">
            <div class="job-field">
                <select name="category">
                    <option value="">Je recherche une personne pour...</option>

                    @foreach ($categories as $category)

                    <option value="{{ $category->id }}">{{ $category->name }}</option>

                     @endforeach
                </select>
            </div>
        </div>
        <div class="col-lg-4 col-md-5 col-sm-5 col-xs-12">
            <div class="job-field">
                <select data-placeholder="City, province or region" class="chosen-city" name="area">
                     <option value="">Choissisez un quartier...</option>
                    @foreach ($areas as $area)

                    <option value="{{ $area->id }}">{{ $area->name }}</option>

                     @endforeach
                </select>
                <i class="la la-map-marker"></i>
            </div>
        </div>
        <div class="col-lg-1 col-md-2 col-sm-2 col-xs-12">
            <button type="submit"><i class="la la-search"></i></button>
        </div>
    </div>
</form>

有人可以帮我解决这个问题吗?我很乐意欣赏。

【问题讨论】:

    标签: laravel search laravel-5 many-to-many advanced-search


    【解决方案1】:

    这样的东西可能对你有用

    User::with(['area', 'services'])
        ->where('type', 'jobbers')
        ->where('area_id', $area_id)
        ->whereHas('services', function ($query) use ($category_id) {
            $query->where('category_id', $category_id);
        })
        ->get();
    

    【讨论】:

    • 我不认为它在类别和区域的选择框中获取搜索的值.....
    • 我正在尝试按类别和区域进行搜索
    • 这正是我的回答;除非我遗漏了什么……我使用了 users 表中的 area_id 并使用了 whereHas ,只有当他们有一个具有所需类别的服务记录时才应该返回用户
    • 我试过你的代码,它说 Parse error: syntax error, unexpected '}'"。我确实检查了所有代码以查找是否缺少 } 但没有缺少 }
    • 看起来像 $query->where 行上缺少分号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多