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

l3zydbqr  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(124)

我尝试使用分页来随机查找所有产品。但是得到了一个意外的结果。这是我的控制器代码:

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

所以我每次都得到随机结果,这是页面的需求。我有200个产品。假设第一个项目是第一页上的项目-12,然后如果我转到下一页,再转到上一页,那么第一个项目应该是项目-12,但它是随机变化的。有什么解决办法吗?
我需要分页,因为产品数量很快就会达到1000个。我还需要随机结果,因为我不希望用户在第一页上看到相同的第一个产品。第一个产品应该在第一页上,但不是每次都在同一个位置。有没有什么方法可以让我以随机顺序制作20个项目的分页数组?
欢迎提出任何建议。

6qftjkof

6qftjkof1#

如何在视图模板中重新排列结果的示例。在控制器中从最新文章中选择,但在模板中每次在不同的位置显示这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

deikduxw

deikduxw2#

当你对它们进行随机排序时,它们是随机排序的。每次页面加载都将是一个新的随机顺序。请参阅this,了解如何使顺序可预测;例如,您可以使用用户ID作为生成器的种子,这样对于给定的用户,顺序将始终相同。或者使用用户详细信息和日期的某种组合,以便在明天为他们提供不同的随机顺序。或者随机生成种子,然后将其保存在会话中,以便更精确地控制持续时间。

相关问题