1

所以,我想对我的一个请求进行分页。“正常方式”似乎效果不佳,所以,我做了一些研究,所有的答案都告诉你要做这样的事情:

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

问题是……它不起作用。Adebug给了我类似的东西:

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");
4

3 回答 3

2

首先,您确实应该contain按照 Oldskool 的回答更正您的数组。

这应该很明显,因为 cake 是这样的:

Warning (512): Model "Post.Like" is not associated with model "Like" 
[CORE\Cake\Model\Behavior\ContainableBehavior.php, line 342]

由于您的实际问题,您可能没有看到这一点。

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

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

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

通过这种方式,它会自动适用于您的所有模型,并且您也应该停止使用recursivemadness。

希望这可以帮助。

于 2013-03-01T03:19:04.850 回答
1

正如 Dave 已经提到的,您的型号名称已关闭。您不应使用该表示法,而应将它们作为“嵌套”模型包含在您正在加载的模型之下。像这样:

"contain" => array(
    "User",
    "Post" => array(
        "User", // Get post related user data
        "Like" // Get post related like data
    )
)
于 2012-12-30T00:21:47.043 回答
1

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

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

于 2012-12-29T22:38:37.257 回答