我正在使用laravel 5.1进行CMS开发。我有一个简单的帖子结构,用户和用户都可以喜欢帖子。
帖子和用户有多对多的关系,并使用数据透视表来建立关系。
帖子模型
public function likedby()
{
return $this->belongsToMany('App\Models\User','user_like_post')
->withTimestamps();
}
用户模型
public function likes(){
return $this->belongsToMany('App\Models\Post','user_like_post')
->withTimestamps();
}
我想列出用户的最新活动。例如,
我知道我必须写一个像这样的SQL查询 -
mysql > select users.name, posts.heading from user_like_post as ulp
> join users on ulp.user_id=users.id
> join posts on ulp.post_id=posts.id
> order by ulp.created_at desc limit 10;
上面的查询工作正常但是有没有办法用laravel eloquent来做呢?
答案 0 :(得分:2)
如果您需要纯粹的雄辩解决方案,那么您需要针对数据透视表的其他模型:
class PostUser extends Model {
protected $table = 'user_like_post';
public function post()
{
return $this->belongsTo(Post::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
// then something like this
$activity = PostUser::latest()->take(10)->get();
@foreach ($activity as $action)
{{ $action->user->name }} likes {{ $action->post->title }}
@endforeach
除此之外,您需要joins
才能按透视表对结果进行排序。