2012-12-29 54 views
1

所以,我想分页处理我的一个请求。 “正常方式”没有,似乎很好地工作,所以,我做了一个小小的研究,所有的答案洁具告诉做这样的事情:使用带条件的分页并包含在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.User无痕迹和Post.Like ...

任何想法?

编辑:

下面是模型协会:

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

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

用户

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

“它不工作”?你什么意思? – mark

+0

正如您在调试中看到的那样,我在'Post'下面没有子数组'User'和'Like'(不同于'Like'和'User'数组)' – Axiol

回答

1

删除Post.UserPost.Like - 这些不是型号,不应列在contain阵列中。

如果它们是模型名称 - 也就是说,您在模型中指定了$name(尽管它违反了命名约定),那么请张贴您的模型及其关联,然后我们可以进一步查看。

+0

是的,它们是型号名称。我用这些协会编辑了我的问题。 – Axiol

+0

@Axiol - “Post.User”和“Post.Like”模型的关联在哪里? – Dave

1

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

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

首先,你的确应该纠正你contain阵列OLDSKOOL回答。

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

你可能没有看到,因为你的实际问题:

这是因为蛋糕得来这样的事情应该已经非常明显。

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

HereContainable行为的文档。 我的建议是,你把它添加到您的AppModel::actsAs财产,像这样:

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

通过这种方式,可以自动地适用于所有的车型,你应该停止使用recursive疯狂了。

希望这会有所帮助。