Laravel: Как сравнить 2 сводные таблицы и отобразить совпадения - PullRequest
0 голосов
/ 01 мая 2020

Я создаю службу знакомств на своем веб-сайте.

У меня есть 5 таблиц: покупатели, продавцы, категории, customer_categories (Pivot), seller_categories (Pivot).

Пользователи будут создавать учетная запись в качестве ПОКУПАТЕЛЯ, выбрав 5 категорий, в которых они хотят купить. Данные о выбранных категориях будут сохранены в таблице customer_categories: id, buyer_id, category_id.

* 1009. * Пользователи будут создавать учетную запись в качестве ПРОДАВЦА, выбирая 5 категорий, в которых они хотят продавать. Данные о выбранных категориях будут храниться в таблице seller_categories с идентификатором: идентификатор_продавца_продавца, идентификатор_категории.

Что мне нужно, так это способ отображения данных, чтобы они отображали совпадающих покупателей / продавцов, которые выбрали те же категории, что и вы. Сопоставление покупателей с продавцами и наоборот.

Что делает его более сложным, так как способ отображения должен быть оценен теми, кто соответствует большинству категорий, которые есть у вас .... так как я хочу отображать это как this.

"Эти покупатели соответствуют 5 выбранным вами категориям" ... ... ... ... "Эти покупатели соответствуют 4 выбранным вами категориям" ... ... .. . ET C.

Любой совет или идеи?

1 Ответ

0 голосов
/ 01 мая 2020

Вы могли бы сделать что-то вроде этого: (Я не знаю, правильный ли синтаксис для отношения многих ко многим, но идея есть: 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() покажет количество подходящих категорий пользователя и продавца

...