获取所有帖子并检查用户是否喜欢每个帖子

时间:2015-06-25 20:14:44

标签: laravel laravel-4 eloquent

我尝试创建一个Eloquent查询来获取所有帖子并检查用户是否喜欢这些帖子。

我有以下型号:

post.php中

class Post extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'posts';

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

    public function likes()
    {
        return $this->hasMany('Like');
    }
}

Like.php

class Like extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'likes';
}

以及典型的User模型。

我的数据库结构如下:

posts表:

+----+---------+---------+
| id | user_id | message |
+----+---------+---------+

users表:

+----+----------+
| id | username |
+----+----------+

likes表:

+----+---------+---------+
| id | post_id | user_id |
+----+---------+---------+

现在,我的查询只返回所有帖子,但如何修改它以返回所有帖子检查用户是否喜欢每个帖子?

Route::get('/', array('as' => 'index', function()
{
    $posts = Post::all();

    return View::make('index')->with('posts', $posts);
}));

谢谢!

2 个答案:

答案 0 :(得分:1)

在posts表和likes表之间的左连接怎么样,按实际用户的id过滤?

$post = DB::table('post')
                 ->select(DB::raw('message, likes.user_id IS NOT NULL as liked'))
                 ->leftJoin('likes', 'users_id', '=', 'likes.user_id')
                 ->where('likes.user_id', '=', $curent_user_id)  
                 ->get();

我现在无法测试它,但我希望它可能会给你一些灵感:)

答案 1 :(得分:0)

您可以使用该特定用户的帖子获取likes。试试这个..

Post::with(['likes' => function() use ($user_id) { $q->where('user_id','=', $user_id); }])->all();

如果用户不喜欢帖子,它将返回空白数组。