仅在所有关键字匹配 Laravel 的情况下检索结果

Retrieve results only where ALL keywords match Laravel

我正在尝试根据所有关键字匹配的标签来拉取用户。

使用这个工作代码:

$search_terms = array('keyword 1', 'keyword 2', 'keyword 3', 'keyword 4');

$search_results = User::where('user_type_id', 1)
    ->where('approved', 1)
    ->whereHas('tags', function ($q) use($search_terms) {
        $q->whereIn('name', $search_terms);
    })->get();

目前我正在使用 whereIn() 来执行此操作,但即使用户在所有输入的关键字中只有 1 个匹配项,它也会吸引用户。因此,如果我们有关键字 1、关键字 2、关键字 3、关键字 4。查询应该只提取给定用户的标签 table 中所有关键字都匹配的结果。

我认为这可行,请检查一下

$search_terms = array('keyword 1', 'keyword 2', 'keyword 3', 'keyword 4');

$search_results = User::where('user_type_id', 1)
    ->where('approved', 1)
    ->whereHas("tags", function($q) use ($search_terms) {
        $q->whereIn("name", $search_terms);
        }, "=", count($search_terms));
    ->get();