我尝试创建一个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);
}));
谢谢!
答案 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();
如果用户不喜欢帖子,它将返回空白数组。