balykhinAS
@balykhinAS
Пишу на php

Как получить количество сущностей относящихся к связям?

Существуют связи, к примеру:
- Посты
- Категории постов
- Пользователи

Допустим модератор может дать доступ пользователям к публикации своих постов в определенные категории.

База данных

categories
- id
- name

users
- id
- name

user_categories
- user_id
- category_id

posts
- id
- user_id
- category_id
- title
- description


Как посредством связей получить список пользователей, у каждого вывести список категорий с количеством постов относящихся к данному пользователю?

Я остановился на этом:

$query = Users::query()->with([
    'categories' => function (BelongsToMany $relation) {
        $relation->withCount(['posts' => function (Builder $builder) {
            // ...
        }]);
    }
]);


Как дальше быть? Сырыми запросами писать не хочется.
  • Вопрос задан
  • 322 просмотра
Решения вопроса 1
balykhinAS
@balykhinAS Автор вопроса
Пишу на php
Решение

$query = Users::query()->with([
    'categories' => function (BelongsToMany $relation) {
        $relation->withCount(['posts' => function (Builder $builder) {
            $builder->whereRaw("`post`.`user_id` = `user_categories`.`user_id`");
        }]);
    }
]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@SlFomin3
пишу на ощупь
Не уверен, но можно добавить в модель Категории

App\Category.php
/**
 * Получить все посты для пользователя.
 */
public function usersPosts()
{
    return $this->hasManyThrough('App\User', 'App\Post');
}

интерпретация из документации:

Для выполнения этого запроса Eloquent ищет catalog_id в промежуточной таблице posts. После нахождения совпадающих ID постов они используются в запросе к таблице users.
Ответ написан
@jazzus
$users = User::with(['categories' => function ($query) {
         $query->withCount(['posts' => function ($q) {
          $q->whereColumn('posts.user_id', 'user_categories.user_id');
          }]);
       }])->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы