首页 > 解决方案 > Laravel:如何比较 2 个数据透视表并显示匹配项

问题描述

我正在我的网站上创建配对服务。

我有 5 个表:买家、卖家、类别、买家类别(枢轴)、卖家类别(枢轴)。

用户将创建一个作为 BUYER 的帐户,选择他们想要购买的 5 个类别。他们选择的类别的数据将存储在 Buyer_categories 表中,其中:idbuyer_idcategory_id

用户将创建一个作为卖家的帐户,选择他们希望销售的 5 个类别。他们选择的类别的数据将存储在 Seller_categories 表中:id、seller_id、category_id。

我需要的是一种显示拉取数据的方式,以便它向您显示选择了与您相同类别的匹配买家/卖家。将买家与卖家匹配,反之亦然。

是什么使它变得更加棘手,因为它需要显示的方式是由与您拥有的最多类别匹配的人排名的......因为我想这样显示它。

“这些买家匹配了您选择的 5 个类别” ... ... ... “这些买家匹配了您选择的 4 个类别” ... ... ETC。

有什么建议或想法吗?

标签: laraveleloquenteloquent-relationship

解决方案


你可以这样做:(我不知道语法对于多对多关系是否正确,但想法就在那里: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()将显示用户和卖家匹配类别的计数


推荐阅读