Упорядочение по количеству полей внешнего ключа - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть три таблицы: продукт, таблица пользователей и покупок.Я пытаюсь вернуть список категорий товаров, которые пользователь чаще всего покупал.Таким образом, список должен выглядеть так: Сад 4, Еда 3, Спорт 2 и т. Д.

Вот мои таблицы:

продукты : id, name, categories_id, price категории : id, категория пользователи : id, name
покупки : id, users_id, products_id

Я изо всех сил пытаюсь понять, как это сделать, эточто у меня до сих пор

Purchase::with('products')->where('purchases.users_id', '=', Auth::users->id())

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Проверьте, если это то, что вам нужно:

$categories = Category::join('products', 'products.category', '=', 'categories.id')
->join('purchases','purchases.products_id', '=','products.id')
->select('categories.*')
->groupBy('purchases.product_id', 'categories.id')
->orderBy(\DB::raw('count(*) as product_purchase_count'), 'desc')
->get();
0 голосов
/ 21 февраля 2019

объяснение:

сначала мы выбираем все товары, приобретенные текущим пользователем, затем присоединяем его к таблице продуктов, группируем строки с атрибутом category , а ввыберите категорию, COUNT (*).

реализация:

Purchase::where("purchases.user_id","=",Auth::user()->id)
          ->join("products","products.id","=","purchases.product_id")
          ->join("categories","products.categories_id","=","categories.id")
          ->select('categories.category', DB::raw('count(*) as total'))
          ->groupBy('products.category')
          ->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...