Laravel: 筛选存在多个标签的用户

问题描述 投票:0回答:1

我页面上的所有用户都可以拥有多个标签。假设这些标签分别为 "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中实现?

laravel search eloquent filtering relationship
1个回答
0
投票

使用 "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();

}

让我知道,如果它帮助你!

© www.soinside.com 2019 - 2024. All rights reserved.