我有 2 个关系表“users”和“user_categories”。(在用户类别表“user_id”和“category_id”中正在保存)
现在我需要搜索具有与百分比值匹配的共同类别的用户。
更清楚地说,我在请求中收到 2 个值 1. 要匹配的类别 ID 数组。 2. 匹配百分比。
所以如果category_ids = array(1,2,3,4,5,6,7,8,9,10);
并且percentage_value = '100%';
然后输出应该包含与所有 10 个类别 ID 匹配的所有用户。
如果百分比值 = '30%';
然后输出应该包含与任意 3 个类别 ID 匹配的所有用户。
现在,如果我使用“whereIn()”,它会返回匹配最小 1 个值的用户,这不是我所需要的。
进行这样的查询非常复杂。任何帮助将不胜感激。
最佳答案
首先,您应该将数据透视表命名为 category_user
以遵循 Eloquent naming conventions .
其次,取接收到的类别 ID 数组和与用户关联的类别 ID 的交集。然后计算交集/总数的百分比,并将其与阈值进行比较:
// filter only users with at least "percentage_value" or greater matching category ids.
$users = User::all()->filter(function (User $user) {
$userCategoryIds = $user->categories->pluck('id')->toArray();
$ids = array_intersect(request()-get('category_ids'), $userCategoryIds);
return (count($ids) / count(request()->get('category_ids'))) >= request()->get('percentage_value');
});
关于php - 有没有一种方法可以检查多个与关系表中最小值的匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863646/