如果在 cakephp 4 中对随机查找查询使用分页,会得到意想不到的结果吗?

Getting unexpected result if using pagination on random find query in cakephp 4?

我正在尝试使用分页以随机顺序查找所有产品。却得到意想不到的结果。 这是我的控制器代码:

$this->paginate = ['maxLimit' => 20];
$articlesData = $this->Products->find('all');
$articlesData->order('RAND()');
$articles = $this->paginate($articlesData);

所以我每次都是随机结果,这是页面的需求。我有 200 种产品。假设第一项是第一页上的第 12 项,然后如果我转到下一页并再次转到上一页,那么第一项应该是第 12 项,但它随机更改。有解决办法吗?

我需要分页,因为产品数量很快就会达到 1000。并且需要随机结果,因为我不希望该用户在首页上看到相同的第一个产品。第一个产品应该在第一页上,但不要每次都在同一个位置。有什么方法可以让我以随机顺序制作包含 20 个项目的分页数组吗?

欢迎所有建议。

如何在视图模板中重新排列结果的示例。在控制器中 select 来自最新的文章,但在模板中每次都在不同的地方显示这 20 个结果。

#控制器

$this->paginate = ['maxLimit' => 20];
$articlesData = $this->Products->find();
$articlesData->orderDESC('creates');
$articles = $this->paginate($articlesData);
$this->set(compact('articles'));

#模板

foreach(shuffle($articles->toArray() as $article) {
    echo $article['name'];
}

https://www.w3schools.com/php/func_array_shuffle.asp

当您随机订购时,它们是随机订购的。每个页面加载都将是一个新的随机顺序。有关如何使订单可预测的示例,请参阅 this;例如,您可以使用用户 ID 为生成器播种,那么给定用户的顺序将始终相同。或者结合用户详细信息和日期为他们明天提供不同的随机订单。或随机生成一个种子,然后将其保存在会话中,以更精确地控制持续时间。