2017-02-24 22 views
1

我有在laravel三個表像這樣:laravel挑最後發佈註釋與每個帖子

用戶,信息和評論

我想拿出那取我所有的查詢用戶的帖子,以及每個帖子的最後評論日期。

的方法,我所採取的不是完美的工作是:

$posts = User::find($userId)->posts()->with('latestComment')->get(); 

在我的崗位我的模型有:

public function latestComment() 
{ 
    return $this->hasOne(Comment::class)->latest(); 
} 

在我的調查結果,我還沒有看到一個方法來從lastComment負載中獲取日期。

任何指針歡迎,

感謝

回答

0

您應該使用eager loading constraint。來自其他答案的代碼將首先加載所有你不想要的評論。

$posts = Post::where('user_id', $userId) 
      ->with(['comments' => function($q) { 
       $q->taletst()->take(1); 
      }]) 
      ->get(); 
+0

這隻會在加載單個帖子時起作用。 OP正在嘗試加載很多帖子。 – fubar

+0

@Rob,這將加載每個職位只有一個評論。 –

+1

它只會加載一個評論,一個職位。如果你試圖將此很多帖子,但還是會只加載的職位一一評論。所有其他職位將是沒有意見的,因爲你限制了意見關係到1 – fubar

0

剛發現一個需要外鍵添加到選擇的方法如下所示:

return $this->hasOne(Comment::class)->latest()->select('field','foreign_key'); 
+0

這不可能是一個解決方案。此代碼將加載所有評論數據。 –

0

您可以使用現有的合作關係,並獲得最新評論。

public function comments() { 
    return $this->hasMany(Comment::class); 
} 

public function latestComment() { 
    return $this->comments()->last(); 
}