2017-02-24 9 views
1

が、私はそうのようlaravelで3つのテーブルを持っているそれぞれのポスト関連掲示ユーザーの投稿、最後に各投稿のコメントの日付が表示されます。私はそれが完璧に働いていない撮影した最後のコメントを選択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

1つのコメントだけが1つの投稿に読み込まれます。これを多くの投稿に適用しようとすると、投稿の1つに対して1つのコメントしか読み込めません。コメントの関係を1に限定しているので、他のすべての投稿はコメントがありません。 – fubar

0

ちょうど1がそうのような選択方法に外部キーを追加する必要が発見さ:

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(); 
} 
関連する問題