我页面上的所有用户都可以拥有多个标签。假设这些标签分别为 "A"、"B "和 "C"。
通过我的搜索功能,我点击 "A "来过滤掉只有 "A "标签的用户。现在,我可以点击 "B "来增加过滤功能,这样我就只想检索同时拥有 "A "和 "B "标签的用户。
这意味着只有一个标签的用户(无论是 "A "还是 "B")将被排除在过滤结果之外。
为了简单起见,有三个表:用户、标签、tag_binds。
users
- id
- name
tags
- id
- name ("A", "B", "C" etc.)
tag_binds
- id
- tag_id
- user_id
如何在Eloquent中实现?
使用 "A "标签的用户 HasManyThrough
像这样在 user
表。
用户模型:
public function tags() {
return $this->hasManyThrough(
'App\Tags',
'App\TagBinds',
'user_id',
'id',
'id',
'tag_id'
);
}
重新驱动器的数据。
$searchdata = ['A','B']; //keep it as an array
if(count($searchdata) > 1) {
$data = User::with('tags')
->orWhereHas('tags', function($q) use ($searchdata){
$q->whereIn('name', $searchdata);
})->get();
} else {
$data = User::with('tags')
->orWhereHas('tags', function($q) use ($searchdata){
$q->where('name', 'LIKE', '%' . $searchdata[0] . '%');
})->get();
}
让我知道,如果它帮助你!