使用帖子类别和用户首选项在Laravel中构建博客

时间:2016-05-04 20:19:29

标签: php laravel laravel-5 eloquent

我正在构建一个有趣的博客。在我的博客中,我有用户,帖子和预定义类别的固定列表。

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_postcategory_user联接表来支持每个关系。但是,我可能会错误地考虑这个问题。

我想显示属于用户指定的类别的帖子循环,但无法解决如何操作的问题。我可以通过以下方式轻松收集用户的类别偏好:

$categories = $user->categoryPreferences->pluck('id');

也可以为帖子做同样的事情:

$categories = $post->categories->pluck('id')

但是,我不确定如何将两个集合合并在一起。我已经研究了多态性,但这看起来并不合适。有人能指出我正确的概念吗?

2 个答案:

答案 0 :(得分:0)

我认为,最好使用Query Builder代替ORM,代码会更好地阅读和写作。

答案 1 :(得分:0)

关系$user->categoryPreferences将为您提供一个类别模型的集合,其在数据透视表中为相应的用户提供了一个条目。

现在,您可以遍历此集合中的每个类别模型,并使用集合上的each()方法访问帖子。

来自Laravel Documentation

每个方法迭代集合中的项目并将每个项目传递给回调:

(在你的情况下)

$user->categoryPreferences->each(function ($category, $key) {
  echo $category->post;
});

这假设您已为类别模型定义了帖子关系。还记得过滤掉重复的帖子。