web-dev-qa-db-ja.com

Laravel説得力のある制限とオフセット

これは私のものです

    $art = Article::where('id',$article)->firstOrFail();
    $products = $art->products;

私はただ「製品」を制限したいこれは間違った方法です

   $products = $art->products->offset($offset*$limit)->take($limit)->get();

手を貸してください!

ありがとう!

35
Sang Trần
skip = OFFSET
$products = $art->products->skip(0)->take(10)->get(); //get first 10 rows
$products = $art->products->skip(10)->take(10)->get(); //get next 10 rows

laravel doc 5.2から https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

スキップ/テイク

クエリから返される結果の数を制限するか、クエリで指定された数の結果をスキップするには(OFFSET)、skipおよびtakeメソッドを使用できます。

$users = DB::table('users')->skip(10)->take(5)->get();

laravel 5.3では、( https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and -offset

$products = $art->products->offset(0)->limit(10)->get(); 
54
Atiqur

laravelには、skipoffsettakelimitという独自の関数があります。以下のlaravelクエリの例のように:-

Article::where([['user_id','=',auth()->user()->id]])
                ->where([['title','LIKE',"%".$text_val."%"]])
                ->orderBy('id','DESC')
                ->skip(0)
                ->take(2)
                ->get();
6
nageen nayak

クイック:

Laravelには、ページごとに表示されるデータの数だけを渡す必要がある、高速なページネーションメソッドpaginateがあります。


//use the paginate
Book::orderBy('updated_at', 'desc')->paginate(8);

ページングをカスタマイズする方法:

次のメソッドを使用できます:offsetlimitskiptake

  • offset、limit:オフセット設定が開始され、クエリされるデータの量を制限します

  • skip、take:skipはいくつかのデータをスキップし、大量のデータを取得します

例えば:


Model::offset(0)->limit(10)->get();

Model::skip(3)->take(3)->get();


//i use it in my project, work fine ~

class BookController extends Controller
{
    public function getList(Request $request) {

        $page = $request->has('page') ? $request->get('page') : 1;
        $limit = $request->has('limit') ? $request->get('limit') : 10;

        $books = Book::where('status', 0)->limit($limit)->offset(($page - 1) * $limit)->get()->toArray();

        return $this->getResponse($books, count($books));
    }
}


5
water_ak47

次のようにskipおよびtake関数を使用できます。

$products = $art->products->skip($offset*$limit)->take($limit)->get();

//レコードと開始インデックスをスキップするには、skipに整数値としてparamを渡す必要があります

// takeは整数値を取得してnoを取得します。 skipで定義されたインデックスを開始した後のレコードの

編集

ごめんなさい。あなたの質問に誤解されました。ページネーションなどが必要な場合は、forPageメソッドを使用します。 forPageメソッドはコレクションに対して機能します。

REf:https://laravel.com/docs/5.1/collections#method-forpage

e.g

$products = $art->products->forPage($page,$limit);
5
Ali

たぶんこれ

$products = $art->products->take($limit)->skip($offset)->get();

1
Salem Megiddo
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunk = $collection->forPage(2, 3);

$chunk->all();
0

このサンプルコードを試してください。

$art = Article::where('id',$article)->firstOrFail();

$products = $art->products->take($limit);
0