Laravel - Paginate随机记录

dan*_*ang 4 php mysql random pagination laravel

我们如何通过laravel中的随机记录进行分页?例如:

$products = Product::all()->orderBy(DB::raw('RAND()'));
$products->paginate(4);
$products->setPath('products');
Run Code Online (Sandbox Code Playgroud)

由于随机顺序,上面将以重复记录结束.如何持久化$ products对象,以便在发出新的页面请求时,它应该过滤相同/固定的随机记录集?

Tho*_*een 15

当您深入了解mysql 的文档并搜索RAND()功能时,您将看到可以使用"种子".

通过使用种子,您将始终获得随机化的相同结果.

例:

$products = Product

    ::all()

    ->orderBy(DB::raw('RAND(1234)'))

    ->paginate(4);
Run Code Online (Sandbox Code Playgroud)

您可以生成自己的种子并存储在会话或其他内容中以便记住它.

更新

Laravel查询生成器现在有不完全相同的功能:

$products = Product

    ::all()

    ->inRandomOrder('1234')

    ->paginate(4);
Run Code Online (Sandbox Code Playgroud)