0

我有三个这样的表:

**Users**
id

**Posts**
id
user_id

**Favorites**
id
user_id
post_id

目前,我做到了,所以当我查询我的帖子进行显示时,它会提取所有创建帖子的相关用户数据,这很棒!但是我现在要做的是添加以查看用户授权(登录)是否收藏了帖子(行),以便我可以显示他们已经收藏了它。我不想重新查询每个帖子(我认为它称为 N+1 问题?)。我正在使用 Laravel4

后模型

class Post extends Eloquent{

    public function user(){
        return $this->belongsTo('User');
    }

用户模型

public function posts(){
    return $this->hasMany('Post');
}

帖子控制器

public function index()
{

    $posts = Post::with('user')->paginate(25);

    return View::make('index', compact('posts'));
}
4

2 回答 2

1

步骤 1.在模型中添加favorites关系。Post

 public function favorites() {
    return $this->hasMany('Favorite');
 }

查询模型时。

 $auth_user_id = Auth::user()->id;

 $posts = Post::with(array('user', 'favorites' => function($query) use ($auth_user_id){
    $query->where('user_id', '=', $auth_user_id);
 }))->get();

有关更多信息,请参阅急切负载约束,

http://laravel.com/docs/eloquent#eager-loading

于 2013-11-13T05:26:19.667 回答
0

使用收藏夹表作为枢轴添加多对多关系将是一种方法。

在 User 模型中添加收藏关系:

public function favorites() {  
    return $this->belongsToMany('Post', 'favorites');  
}

然后,您应该能够通过简单地访问获得所有收藏夹

Auth::user()->favorites

要查找当前帖子是否是收藏夹,请使用

$isFavorite = Auth::user()->favorites->has($post->id);
于 2013-11-13T09:27:43.390 回答