Cakephp分页查找

Cakephp分页查找,cakephp,pagination,Cakephp,Pagination,我想列出给定用户的帖子。它可以工作,但分页不准确 我的代码如下 public function index($userid = null) { if ($this->Post->exists($userid)) { $this->set('posts',$this->Post->find('all',array('conditions'=>array('user_id'=>$userid))), $

我想列出给定用户的帖子。它可以工作,但分页不准确

我的代码如下

public function index($userid = null) {

     if ($this->Post->exists($userid)) {

        $this->set('posts',$this->Post->find('all',array('conditions'=>array('user_id'=>$userid))), 
            $this->paginate());

        } else
        {

        $this->Post->recursive = 0;
        $this->set('posts', $this->paginate());
    }
结果给出了正确的列表->3篇文章,但分页器显示第1页和第2页

你能帮我吗?
谢谢

我很确定分页的条件现在确实是这样的

如果要设置分页条件,应按以下步骤进行:

$this->paginate = array('conditions' => array('Post.user_id' => $userid)));
$this->set('posts', $this->paginate());

是的,存储在$posts in view中的结果将是正确的,因为您为它指定了正确的查找结果,同时您已经在没有任何条件的情况下对post模型进行分页。

我非常确定分页的条件现在确实是这样工作的

如果要设置分页条件,应按以下步骤进行:

$this->paginate = array('conditions' => array('Post.user_id' => $userid)));
$this->set('posts', $this->paginate());

是的,存储在视图中的$posts中的结果将是正确的,因为您为其分配了正确的查找结果,同时您已在没有任何条件的情况下对post模型进行分页。

首先,您要检查post是否存在,但使用$userid。您是要查看该用户是否存在,获取该用户的帖子,还是获取所有用户的帖子?现在,假设您的$userid=159,但数据库中的max Post.id为28,则不满足该条件,因为它正在检查是否存在id=159的帖子,而它不存在

第二,你的条件是错误的。您正在执行查找和分页,这是两个独立的查询。这些条件是在find查询上实现的,而不是在paginate上实现的,但是您只显示find结果

public function index($userid = null) {
    // setting recursive outside of if statement makes it applicable either way
    $this->Post->recursive = 0;

    // check if user exists
    if ($this->Post->User->exists($userid)) {
        // get posts for user
        $this->set('posts', $this->paginate('Post', array('Post.user_id' => $userid));
    }
    else{
        // get all posts
        $this->set('posts', $this->paginate('Post'));
    }    

} // end index function

首先,您要检查帖子是否存在,但使用$userid。您是要查看该用户是否存在,获取该用户的帖子,还是获取所有用户的帖子?现在,假设您的$userid=159,但数据库中的max Post.id为28,则不满足该条件,因为它正在检查是否存在id=159的帖子,而它不存在

第二,你的条件是错误的。您正在执行查找和分页,这是两个独立的查询。这些条件是在find查询上实现的,而不是在paginate上实现的,但是您只显示find结果

public function index($userid = null) {
    // setting recursive outside of if statement makes it applicable either way
    $this->Post->recursive = 0;

    // check if user exists
    if ($this->Post->User->exists($userid)) {
        // get posts for user
        $this->set('posts', $this->paginate('Post', array('Post.user_id' => $userid));
    }
    else{
        // get all posts
        $this->set('posts', $this->paginate('Post'));
    }    

} // end index function
请参阅文档 问题中的代码相当混乱

发现 该方法只有两个参数:

findstring$type='first',array$params=array

第三个参数调用paginate的结果未使用,将被忽略-但它将根据paginate调用中使用的条件为pagination助手设置视图变量-未使用任何条件

不可能对find调用的结果进行分页—为此,请重新构造代码以调用paginate而不是find

分页 该方法仅适用于-它可以以多种方式使用,以下是一个控制器代码示例:

$this->paginate$条件

是问题中最合适的用法,即完整的行动代码应类似于:

public function index($userId = null) {
    $conditions = array();
    if ($userId) {
        $conditions['Post.user_id'] = $userId;
    }
    $this->set('posts',$this->paginate($conditions));
}
请注意,从逻辑上讲,如果请求的用户id不存在,则响应应该是“无”,而不是“全部”。

请参阅文档 问题中的代码相当混乱

发现 该方法只有两个参数:

findstring$type='first',array$params=array

第三个参数调用paginate的结果未使用,将被忽略-但它将根据paginate调用中使用的条件为pagination助手设置视图变量-未使用任何条件

不可能对find调用的结果进行分页—为此,请重新构造代码以调用paginate而不是find

分页 该方法仅适用于-它可以以多种方式使用,以下是一个控制器代码示例:

$this->paginate$条件

是问题中最合适的用法,即完整的行动代码应类似于:

public function index($userId = null) {
    $conditions = array();
    if ($userId) {
        $conditions['Post.user_id'] = $userId;
    }
    $this->set('posts',$this->paginate($conditions));
}

请注意,从逻辑上讲,如果请求的用户id不存在,则响应应该是“无”,而不是“全部”。

我会支持您指出用户id逻辑错误的答案,但其中有太多的错误=。谢谢,您的代码工作得很好。事实上,当一个非用户点击链接来运行索引功能时,他得到了所有的帖子,当他被连接时,他得到了他自己的帖子列表。这就是我想做的。Userid包含连接用户的id。@AD7six lol必须给出解释,而不是rant….删除了我的一些解释:如果这是你想要的user2402436,然后,您可以检查用户是否已登录,然后使用条件“Post.user\u id”=>this->Auth->user'id”。如果您指出了userid逻辑错误,我会对您的答案进行投票,但是里面有太多的咆哮=。谢谢,您的代码运行良好。实际上,当一个非用户点击链接来运行索引函数时,他得到了所有的信息
当他被连接时,他有他自己的帖子列表。这就是我想做的。Userid包含连接用户的id。@AD7six lol必须给出解释,而不是rant…拿出我的一些解释:如果这是你想要的user2402436,那么你可以检查用户是否登录,然后使用条件'Post.user\u id'=>$this->Auth->user'id'@bowlerae,这两个条件在这个答案中都不重复;我想对这两种回答都投赞成票,但体制不允许。对不起,我只能投1票。多亏了你们两个事实上是的我有点难过。我努力及时提供一个正确的答案,指出了一个其他答案都没有指出的问题,解释了find vs paginate中的错误,正如您所做的那样,并向用户提供了解释。我拿出了两句你可能认为是咆哮的话,但我不明白为什么这个答案比另外两句更被接受。@bowlerae回答咆哮:首先,你的答案关注的是人,而不是代码。里面有大量的你。第二,它很有宾格。请注意,本文基于您的答案。我之所以选择回答这个问题,是因为现有的回答都没有明确说明可以将条件直接传递给paginate,也没有明确说明不可能以某种组合调用find和paginate。预计会有多个答案。我建议您在meta上提问,如果您仍有一些顾虑/疑问,我感谢您澄清您的动机。您可以直接将条件传递给paginate,或者明确说明无法以某种组合调用find和paginate。johnniedoe和我都解释了如何将条件传递给paginate。我还指出了同时使用find和paginate但只显示find和bowlerae的缺陷,这两种方法都没有被这个答案复制;我想对这两种回答都投赞成票,但体制不允许。对不起,我只能投1票。多亏了你们两个事实上是的我有点难过。我努力及时提供一个正确的答案,指出了一个其他答案都没有指出的问题,解释了find vs paginate中的错误,正如您所做的那样,并向用户提供了解释。我拿出了两句你可能认为是咆哮的话,但我不明白为什么这个答案比另外两句更被接受。@bowlerae回答咆哮:首先,你的答案关注的是人,而不是代码。里面有大量的你。第二,它很有宾格。请注意,本文基于您的答案。我之所以选择回答这个问题,是因为现有的回答都没有明确说明可以将条件直接传递给paginate,也没有明确说明不可能以某种组合调用find和paginate。预计会有多个答案。我建议您在meta上提问,如果您仍有一些顾虑/疑问,我感谢您澄清您的动机。您可以直接将条件传递给paginate,或者明确说明无法以某种组合调用find和paginate。johnniedoe和我都解释了如何将条件传递给paginate。我还指出了使用find和paginate但只显示find的缺陷。