php - 有没有一种方法可以检查多个与关系表中最小值的匹配?

标签 php mysql laravel orm

我有 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/

相关文章:

laravel - 创建新字段的迁移时,将数据从一个字段复制到另一个字段的最佳方法是什么?

javascript - html 文本区域的语法检查器

php - 如何用mysql从尾到头重写行id

php google app engine在本地开发服务器上上传文件

mysql - 转换为日期时间仅对 MySQL 中的列返回 null

php - OOP PHP undefined variable 和空查询

php - Laravel 4.1 Eloquent - 过滤关系集合

php - 循环遍历 Laravel 集合并使用 Redis 存储到 key

php - 在 Wordpress 上显示查询自定义表

php - PHP 中的 "GLOBAL"和 "STATIC"变量有什么区别?