2015-07-11 200 views
0

我使用laravel 5.1進行CMS開發。我有一個簡單的帖子結構,用戶和用戶可以像帖子一樣。Laravel 5.1 - 使用雄辯數據查詢數據透視表

帖子和用戶具有多對多的關係,並使用數據透視表進行關係。

帖子模型

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(); 
} 

我想列出了用戶的最新活動。對於例如

  1. USERNAME1喜歡POST2
  2. Username5喜歡Post9
  3. Username30喜歡Post25

我知道我必須寫一個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雄辯呢?

回答

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爲了通過透視表中的結果進行排序。