【问题标题】:How To Use spatie/laravel-query-builder For Filtering/Searching Data with Relationship? (Laravel)如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)
【发布时间】:2021-10-29 02:00:42
【问题描述】:

当我询问如何过滤有关系的数据时,有人推荐我使用 spatie/laravel-query-builder 过滤/搜索数据。我仍然对此感到困惑。

我正在尝试做的事情:过滤/搜索角色为“学生”(关系)的数据并包含“x”字。

mycontroller.php 在添加任何 spatie/query-builder 代码之前

public function searchStudent(Request $request)
        {
            $user = Auth::user(); // Untuk Photo Profile
            // menangkap data pencarian
            $search = $request->table_search;
                // This part is the code that supposed to filter the search that has relation to data named Student in name column
            $search = User::whereHas('roles', function($q){
                $q->where('name', 'Student');
            })->where('name','like',"%".$search."%")
            ->orWhere('nisn','like',"%".$search."%")
            ->orWhere('username','like',"%".$search."%")
            ->get();
                // // what I got is actually the normal search, so all other relation than Student also show up
            return view('pages.admin.user.student.showStudentFiltered', compact('search', 'user') );
        }

我得到的只是一个旧的常规搜索...它们只显示所有包含“x”字的数据,但不显示它们之间的关系。

我想要的示例搜索数据:搜索具有“学生”角色的单词“A”用户

Aqua|角色:学生

阿明|角色:学生

Alpine|角色:学生

我得到了什么:

管理员|角色:管理员

阿姆斯特丹|角色:老师

阿梅尔|角色:老师

Aqua|角色:学生

阿明|角色:学生

Alpine|角色:学生

有人知道如何使用 spatie/laravel-query-builder 或如何获得我想要的过滤/搜索功能吗?我需要重写什么代码?

【问题讨论】:

    标签: php laravel search filter relationship


    【解决方案1】:

    查询构建器whereHas 的底层SQL 没有加入,它只是一个额外的where 子句。 with 将为您加入。 使用

    User::with('roles')->whereHas('roles', function($q){
                    $q->where('name', 'Student');
                })
    

    【讨论】:

    • 所以....像这样? $search = User::with('roles')->whereHas('roles', function($q){ $q->where('name', 'Student'); })->where('name' ,'like',"%".$search."%") ->orWhere('nisn','like',"%".$search."%") ->orWhere('username','like' ,"%".$search."%") ->get();能用吗?
    猜你喜欢
    • 2017-10-02
    • 2019-12-22
    • 1970-01-01
    • 2014-11-28
    • 2021-06-14
    • 1970-01-01
    • 2021-06-07
    • 2019-06-17
    • 2017-06-16
    相关资源
    最近更新 更多