如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)
Posted
技术标签:
【中文标题】如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)【英文标题】:How To Use spatie/laravel-query-builder For Filtering/Searching Data with Relationship? (Laravel) 【发布时间】: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 或如何获得我想要的过滤/搜索功能吗?我需要重写什么代码?
【问题讨论】:
【参考方案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();能用吗?以上是关于如何使用 spatie/laravel-query-builder 过滤/搜索具有关系的数据? (拉拉维尔)的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?