I'm building a blog for fun. In my blog, I have users, posts, and a fixed list of predefined categories.
1) Posts belong to many categories. 2) Users can specify category preferences, and therefore belong to many categories.
I have this set up as a series of many-to-many relationships:
In User.php
:
/**
* A user belongs to many categories
*/
public function categoryPreferences()
{
return $this->belongsToMany('App\Category');
}
In Post.php
:
/**
* A Post Can Have Many Likes
*
* @return \Illuminiate\Database\Eloquent\Relations\belongsToMany
*/
public function categories()
{
return $this->belongsToMany('App\Category');
}
And the inverse of each in Category.php
:
/**
* A category belongs to many users
*/
public function users()
{
return $this->belongsToMany('App\User');
}
/**
* A category belongs to many posts.
*
* @return \Illuminiate\Database\Eloquent\Relations\belongsToMany
*/
public function posts()
{
return $this->belongsToMany('App\Post');
}
I have corresponding category_post
and category_user
join tables to support each relationship. However, I may be thinking about this incorrectly.
I would like to display a loop of posts that belong to categories that users have specified, but can't work through how to do that. I can easily collect a user's category preferences with:
$categories = $user->categoryPreferences->pluck('id');
And can do the same for posts:
$categories = $post->categories->pluck('id')
However, I'm unsure how to merge the two collections together. I've looked into polymorphism, but that doesn't seem quite right. Can someone point me toward the correct concept?