2016-07-19 2 views
1

Neoeloquentクエリの結果の数を制限したい場合、take()はうまく動作しますが、skip()をどうすればよいですか?私はlaravel 5.2 Doを読んでいます。私はskip(10) - > take(10)を使用しようとしていますが、 "Method skip does not exist。"ここ が私のコードです:Vinelab/Neoeloquentクエリでskip/takeを使用するにはどうすればいいですか?

$artifact=Models\Artifact::where('aid',$request->aid)->first(); 
$comments=$artifact->comments->take(10); 

答えて

0

[OK]を、私は$ artifact->コメントの結果セットがlaravel collectionているので、何のスキップ()メソッドが存在しない、自分の質問への答えを見つけました。 slice()という名前の別の方法を使用して、問題を解決し、結果の目的のサブセットを得ることができました。今私は持っています:

$comments=$artifact->comments->slice($startOffset, $count); 

これはうまくいきます。 splice()という別のメソッドは同様の値を返しますが、元の結果セットを変更することを考慮してください。

+0

注意あなたは正確な数を取得するためにクエリを実行する必要があります。 '$ artifact-> comments() - > take(10) - > skip(5) - > get();' – Mulkave

+0

thanks @Mulkave you 'これはまさに私が探しているものです。あなたのソリューションは、私のものよりも効率的です。特に、アーティファクトのコメントがたくさんあるときに効果的です。私が開発しているアプリケーションでは非常にそうです。あなたは私を救いました。再度、感謝します。 – Omid

+0

聞くのは嬉しいです!それを答えとして入れます。 – Mulkave

1

あなたが提供した回答では、すべてのコメントを取得することになるので、多数のコメントがあるとパフォーマンスのボトルネックになり、特にそれらのすべてを必要としません。次のように何ができることは、それぞれ方法takeskipを使用してクエリで使用limitoffsetです:あなたが希望する場合は、すべてのアーティファクトのコメントを取得し、それらのうちの多数を取っている、ここで

$comments = $artifact->comments()->take(10)->skip(5)->get() 
関連する問題