【问题标题】:How to filter all and specific fields using Laravel Eloquent?如何使用 Laravel Eloquent 过滤所有和特定字段?
【发布时间】:2021-07-25 12:48:24
【问题描述】:

我想在过滤所有和特定字段中的记录时重构我的源代码。 目前,我正在通过在我的请求中传递“搜索”来过滤所有字段:
GET 请求:/api/users?search=

public function index(Request $request) {
    $search = request("search") ?? "";
    $users = $users->where(function ($query) use ($search) {
        $query->where('code', "like", "%" . $search . "%");
        $query->orWhere("first_name", "like", "%" . $search . "%");
        $query->orWhere("last_name", "like", "%" . $search . "%");
        $query->orWhereHas('department', function ($q) use ($search) {
            $q->where('name', "like", "%" . $search . "%");
        });
    });
    return $users->paginate(10);
}

我尝试关注this article,现在我的 GET 请求应该是:/api/users?first_name=Juan&last_name=Cruz
我是否应该像 /api/users?all=Juan 这样通过 all 请求来一次过滤所有字段?

应用此类功能时,最好的方法是什么?
如果您知道任何可以作为我参考的文章/资源,那将是一个很大的帮助。

【问题讨论】:

  • 如果你想为数据表实现这个,你可以使用Laravel Datatable
  • @Raja 不幸的是,我不是。我在前端使用 vue.js 和 Vuetify

标签: php laravel filter eloquent filtering


【解决方案1】:

如果您关注您分享的文章,您的网址应类似于/users?name=John&last_name=Doe&code=123

然后,您只需调用User::filter($filters)->get(),它就会自动将您的查询字符串过滤器应用于查询。

如果你不想实现过滤器功能,你可以使用 eloquent when 方法。它仅在给定条件为真时应用过滤器。

public function index(Request $request) {
    $query = User::query();
    $query = $query->when(request('code'), function($query) {
        $query->where('code', "like", '%'.request('code').'%')
    })
    ->when(request('first_name'), function($query) {
        $query->where('first_name', 'like', '%'.request('first_name').'%');  
    })
    ->when(request('last_name'), function($query) {
        $query->where('last_name', 'like', '%'.request('last_name').'%');  
    })
    ->when(request('department'), function($query) {
        $query->where('last_name', 'like', '%'.request('last_name').'%');  
    })
    ->when(request('department'), function($query) {
        $query->whereHas('department', function($query) {
            $query->where('name', 'like', '%'.request('department').'%');
        });  
    });
    
    return $query->paginate(10);
}

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2015-04-21
    • 2022-07-11
    • 2021-04-05
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多