2017-10-04 17 views
1

私はlaravelのhasMany関係を制限しようとしていますが、各投稿の代わりに全部ま​​たはすべてのレコードに制限があります。以下は説明のための私のコードです。Laravelの各投稿のコメントの制限(投稿モデルとのhasMany関係)

$posts = \App\Post::orderBy('updated_at', 'DESC')->with('comments')->where('user_posts.user_id', $user_id)->paginate(10); 

下回っ問題ではなく、各ポストのための2のコメントを与える、それはすべてのフェッチポストからわずか2コメントを与えているとして、私は、各記事に2または3の最近のコメントを取得しようとしています

class Post extends Model { 


    protected $table = "user_posts"; 
    protected $appends = ['logged_in_user_id', 'comments_count']; 

    public function user() { 
     return $this->belongsTo('App\User'); 
    } 

    public function comments() { 
     return $this->hasMany('App\Comment')->take(2); 
    } 
} 

現在の結果:

POST1:

  1. コメント1件の
  2. コメント2

POST2: それは全体的に制限されるため、ポスト2にロードされませんコメント。

予想:

POST1:

  1. コメント1
  2. コメント2

POST2:

  1. コメント1
  2. 私は似たような行っている2
+0

この '\アプリケーション\ポストを試してみてください::のOrderBy( '​​updated_atの'、 'DESC')の可能な解決策ですq){ $ q-> take(2); }])> get(); '!! – Maraboc

+0

私はそれを試みたが、私は同じ結果を与える –

+1

明らかな質問投稿2コメントがありますか? – Maraboc

答えて

0

コメントが前にこれを試してください代わりに

public function comments(){ 
    return $this->hasMany(Comment::class, 'post_id')->latest()->limit(4); 
} 
それはのような4件のコメントを読み込む常に熱望しているように、あなたはまた、ポストモデルにグローバルスコープを追加することができます

そう:

static::addGlobalScope('comments', function ($builder){ 
     $builder->with('comments'); 
    }); 

ので、あなたのPost.phpであなたの起動方法は次のようになります。

protected static function boot() 
{ 
    parent::boot(); 

    static::addGlobalScope('comments', function ($builder){ 
     $builder->with('comments'); 
    }); 

} 

したがって、あなたはそうのように問い合わせることができます:

$posts = \App\Post::orderBy('updated_at', 'DESC')->where('user_posts.user_id', $user_id)->paginate(10); 

UPDATE:

それが動作しない、限界は1回だけ適用されているので、我々はこの

$posts = \App\Post::orderBy('updated_at', 'DESC')->where('user_posts.user_id', $user_id)->paginate(10); 

ようなクエリ。 github issue https://github.com/laravel/framework/issues/4835を確認してください。>と([ 'コメント' =>関数($ - しかし、ここでhttps://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

はそれが役に立てば幸い:)

+0

ありがとうございます返信ありがとうございますが、同じことをします。私は5つの投稿を持っていますが、それぞれ1つのコメントがありますが、それは5つの対応するすべての投稿のための4つのコメントをロードする...それは5つの投稿ごとに4つのコメントをロードする必要があります –

+0

@SainishMomin hmmm、コメント表? –

+0

post_idはコメントテーブルの外来キーです –

関連する問題