2012-12-29 35 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瘋狂了。

希望這會有所幫助。