使用分页条件和包含CakePHP



所以,我想对我的一个请求进行分页。"正常的方式"似乎不太奏效,所以,我做了一点研究,所有的答案都告诉我这样做:

$this->paginate("Like",
    array("Like.user_id" => $id),
    array(
        "order" => "Like.created desc",
        "contain" => array(
            "User",
            "Post",
            "Post.User",
            "Post.Like"
        )
    )
);

问题是……这行不通。一个debug的值是这样的:

array(
    (int) 0 => array(
        'Like' => array(
            'id' => '38',
            'created' => '2012-10-03 21:21:27',
            'post_id' => '29',
            'user_id' => '19'
        ),
        'Post' => array(
            'id' => '29',
            'title' => 'Don't Panic',
            'description' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam elementum sem ac sem imperdiet cursus. Quisque venenatis pulvinar ornare. Donec rutrum, lacus vel imperdiet sagittis, metus risus interdum ante, iaculis venenatis arcu nibh et odio.',
            'image' => '29-c49cb96c.jpg',
            'model' => '',
            'created' => '2012-09-07 01:46:49',
            'user_id' => '19',
            'project_id' => '1',
            'like_count' => '1'
        ),
        'User' => array(
            'password' => '*****',
            'id' => '19',
            'username' => 'Axiol'
        )
    )
)

没有Post.UserPost.Like的痕迹…

你知道吗?

编辑:

以下是模型关联:

文章

public $belongsTo = array("User", "Project");
public $hasMany = array("Comment", "Like");

public $belongsTo = array("User", "Post" => array("counterCache" => true));
用户

public $hasMany = array("Post", "Comment");

首先,您应该纠正您的contain数组作为Oldskool回答。

这应该是非常明显的,因为蛋糕通过这样的东西:

Warning (512): Model "Post.Like" is not associated with model "Like" 
[CORECakeModelBehaviorContainableBehavior.php, line 342]

你可能没有看到这是因为你的实际问题。

您没有提及您是否以任何方式加载Containable行为。我假设你不是,你知道了。contain数组将被完全忽略。

这是Containable行为的文档。我的建议是将它添加到AppModel::actsAs属性中,如下所示:

class AppModel extends Model {
    public $actsAs = array('Containable');
}

这样,所有的模型都可以自动使用,你也应该停止使用recursive

删除Post.UserPost.Like -这些不是模型,不应该在contain数组中列出。

如果它们是模型名称-即,您已经在模型中指定了$name(即使它打破了命名约定),那么请发布您的模型及其关联,我们可以进一步查看

正如Dave已经提到的,你的模型名称是错误的。您不应该使用这种表示法,而应该将它们作为"嵌套"模型包含在正在加载的模型下面。这样的:

"contain" => array(
    "User",
    "Post" => array(
        "User", // Get post related user data
        "Like" // Get post related like data
    )
)

相关内容

  • 没有找到相关文章

最新更新