web-dev-qa-db-ja.com

Laravel雄弁にnをスキップ、すべて取る?

Laravelでskip()をチェーンする場合は、take()も使用する必要があることに気付きました。最初のn行をスキップしたいが、残りは取りたい。 takeメソッドは整数のみを許可しますが、takeに大きな数を指定するなどのハックなトリックに頼らずにこれを行うにはどうすればよいですか?

14
Helen Che

基本的に、すべてのOFFSETで、mysqlを機能させるにはLIMITを指定する必要があります。したがって、制限を指定せずにこれを行う方法はありません。ここで作業するには、いくつかのphp mojoが必要です。

Attendanceという名前のEloquentクラスがあるとします。動作するものは次のとおりです。

//Getting count
$count = Attendance::count();
$skip = 5;
$limit = $count - $skip; // the limit
$collection = Attendance::skip($skip)->take($limit)->get();
24
Yousof K.

2つのクエリを強制的に実行するため、これは良い答えではないと思います。正しい方法は次のとおりです。

$collection = Attendance::skip($skip)->take($limit)->get();
$collection.shift();

コレクションの詳細については、こちらをご覧ください こちら

3
Franco Risso

MySQLを使用しており、最大行を取得するために2つのクエリを使用したくない場合は、PHP最大INT値をtake()パラメーターとして使用できます(例:take(PHP_INT_MAX)

Laravel Query Grammar 制限を整数にキャスト) であるため、それより大きな数値を使用することはできません。

LIMITに関するMySQLドキュメント から:

特定のオフセットから結果セットの最後までのすべての行を取得するには、2番目のパラメーターに大きな数を使用できます。

例えば:

\App\User::skip(10)->take(PHP_INT_MAX)->get();
1
SubRed