我正在构建一个有趣的博客。在我的博客中,我有用户,帖子和预定义类别的固定列表。
1)帖子属于许多类别。 2)用户可以指定类别首选项,因此属于许多类别。
我将此设置为一系列多对多关系:
在User.php
:
/**
* A user belongs to many categories
*/
public function categoryPreferences()
{
return $this->belongsToMany('App\Category');
}
在Post.php
:
/**
* A Post Can Have Many Likes
*
* @return \Illuminiate\Database\Eloquent\Relations\belongsToMany
*/
public function categories()
{
return $this->belongsToMany('App\Category');
}
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');
}
我有相应的category_post
和category_user
联接表来支持每个关系。但是,我可能会错误地考虑这个问题。
我想显示属于用户指定的类别的帖子循环,但无法解决如何操作的问题。我可以通过以下方式轻松收集用户的类别偏好:
$categories = $user->categoryPreferences->pluck('id');
也可以为帖子做同样的事情:
$categories = $post->categories->pluck('id')
但是,我不确定如何将两个集合合并在一起。我已经研究了多态性,但这看起来并不合适。有人能指出我正确的概念吗?
答案 0 :(得分:0)
我认为,最好使用Query Builder代替ORM,代码会更好地阅读和写作。
答案 1 :(得分:0)
关系$user->categoryPreferences
将为您提供一个类别模型的集合,其在数据透视表中为相应的用户提供了一个条目。
现在,您可以遍历此集合中的每个类别模型,并使用集合上的each()
方法访问帖子。
来自Laravel Documentation,
每个方法迭代集合中的项目并将每个项目传递给回调:
(在你的情况下)
$user->categoryPreferences->each(function ($category, $key) {
echo $category->post;
});
这假设您已为类别模型定义了帖子关系。还记得过滤掉重复的帖子。