Laravel:过滤存在多个标签的用户
Posted
技术标签:
【中文标题】Laravel:过滤存在多个标签的用户【英文标题】:Laravel: Filtering users where multiple tags are present 【发布时间】:2020-09-01 06:44:40 【问题描述】:我页面上的所有用户都可以有多个标签。假设这些标签被标记为“A”、“B”和“C”。
通过我的搜索功能,我单击“A”以仅过滤掉具有“A”标签的用户。现在,我可以点击“B”来添加过滤,这样我就只想检索同时拥有“A”和“B”的用户。
这意味着仅应用了 ONE 标签的用户(“A”或“B”)将被排除在过滤结果之外。
为了简单起见,一共有三个表:users、tags、tag_binds
users
- id
- name
tags
- id
- name ("A", "B", "C" etc.)
tag_binds
- id
- tag_id
- user_id
如何在 Eloquent 中实现这一点?
【问题讨论】:
【参考方案1】:在user
表中使用HasManyThrough
就像这样:
用户模型:
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();
如果对你有帮助,请告诉我!
【讨论】:
谢谢。我试着按照你的建议去做。我认为这在某种程度上是正确的方法,但是我仍然得到只有“A”作为标签的 User1。但是,User2 同时具有“A”和“B”,而我只想检索这些用户。 这是否满足您的要求或有什么问题? 我正在寻找的是仅检索具有确切所选组合的用户。例如,如果我为过滤器选择“A”和“B”,那么查询必须只选择至少具有这两个标签的用户。所以它基本上是“选择具有标签'A'和标签'B'的用户”。希望这能澄清我的问题 :-) 并继续,如果我之后选择“C”,那么我只想检索带有 A + B + C 标签的用户。以上是关于Laravel:过滤存在多个标签的用户的主要内容,如果未能解决你的问题,请参考以下文章