Какими должны быть отношения?


У меня есть две модели: Users и Categories.

Мне нужно получить все категории, на которые подписался пользователь.

Do, структура базы данных:

User    Category   UserCategory
___     _________  __________
id      id | name  category_id user_id

Модель категории:

 public function user()
    {
        return $this->belongsToMany('AppUser', 'user_id', 'id');
    }

Модель пользователя:

public function categories()
    {
        return $this->belongsToMany('AppCategory');
    }

Я попытался получить все категории, на которые пользователь подписался через третью таблицу:

$categories =  Category::with("user")->where("id", Auth::user()->id)->get();

Это не работает для меня

1 2

1 ответ:

Чтобы получить все категории, принадлежащие пользователю, используйте whereHas() метод:

$categories = Category::whereHas('users', function($q) use($userId) {
    $q->where('id', $userId);
})->get();

Также убедитесь, что имя таблицы categories_users и определите отношение users следующим образом:

public function users()
{
    return $this->belongsToMany('App\User');
}