laravel - Laravel:如何比较 2 个数据透视表并显示匹配项
问题描述
我正在我的网站上创建配对服务。
我有 5 个表:买家、卖家、类别、买家类别(枢轴)、卖家类别(枢轴)。
用户将创建一个作为 BUYER 的帐户,选择他们想要购买的 5 个类别。他们选择的类别的数据将存储在 Buyer_categories 表中,其中:id
、buyer_id
、category_id
。
用户将创建一个作为卖家的帐户,选择他们希望销售的 5 个类别。他们选择的类别的数据将存储在 Seller_categories 表中:id、seller_id、category_id。
我需要的是一种显示拉取数据的方式,以便它向您显示选择了与您相同类别的匹配买家/卖家。将买家与卖家匹配,反之亦然。
是什么使它变得更加棘手,因为它需要显示的方式是由与您拥有的最多类别匹配的人排名的......因为我想这样显示它。
“这些买家匹配了您选择的 5 个类别” ... ... ... “这些买家匹配了您选择的 4 个类别” ... ... ETC。
有什么建议或想法吗?
解决方案
你可以这样做:(我不知道语法对于多对多关系是否正确,但想法就在那里:D)
$buyerCategories = $user->categories()->pluck('id')->toArray();
$sellers = Seller::whereHas( //this will get only sellers with al least one same category as $user
'categories',
function($q) use ($buyerCategories)
{
$q->whereIn('id', $buyerCategories);
}
)
->with([ //this will select only categories same as $user
'categories' =>
function($q) use ($buyerCategories)
{
$q->whereIn('id', $buyerCategories);
}
])
->get();
$sellers->categories->count()
将显示用户和卖家匹配类别的计数
推荐阅读
- c# - ServiceStack ORMLite 如何在查询中解析 JSON 数据
- asp.net-core - 如何在下面的代码中返回成功以使用 asp.net 核心?
- stripe-payments - 订阅设置试用期时如何防止在条带中创建重复订阅
- python - 通过 Jupyter Notebooks 的 psycopg2 psql 命令不起作用
- sql-server - 查找整个数据库中表的每一列(不包括空白和空值)中的记录数
- vue.js - 有条件地添加一个JS脚本?
- c# - 在 IIS 上使用 Windows 身份验证的 Asp.Net Core MVC
- python - 谷歌云中使用的 blob 名称是什么?
- reactjs - AWS S3 - 我们计算的请求签名与签名不匹配
- xml - XPath - 查找相似但包含非字母数字字符