2012-12-29 5 views
1

그래서 요청한 페이지 중 하나에 페이지 매김을하고 싶습니다.조건부로 페이지 매기기 사용하기 및 CakePHP 포함하기

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

문제는이 '아무튼 ...이다 : "정상적인 방법은"한하지 내가 조금 연구를 만들고 모든 해답은 다음과 같이 뭔가를 말하는 도자기, 아주 잘 작동하는 것 같다, 그래서 일하지 마라.

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 ...

어떤 생각하십시오 debug는 나에게 그런 일을 준다?

편집 : 여기

이 모델 협회 :

포스트

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' ('Like '와'User' 배열과 다른 점)에'User'와'Like' 하위 배열이 없습니다. – Axiol

답변

1

Post.UserPost.Like을 제거하십시오. 모델이 아니며 contain 어레이에 나열되어서는 안됩니다.

모델 이름 인 경우 (즉, 명명 규칙이 깨 졌음에도 불구하고 모델에 $name을 지정 했음) 모델과 관련성을 게시하면 더 자세히 볼 수 있습니다.

+0

예, 그들은 모델 이름입니다 . 나는 협회와 함께 나의 질문을 편집했다. – Axiol

+0

@Axiol -'Post.User'와'Post.Like' 모델에 대한 연관성은 어디에 있습니까? – Dave

1

Dave가 이미 언급했듯이 모델 이름은 꺼져 있습니다. 그 표기법을 사용해서는 안되며,로드하는 표기법 아래에 "중첩 된"모델로 표기법을 포함시켜야합니다. 이처럼 : Oldskool 대답으로

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

첫째로, 당신은 실제로 당신의 contain 배열을 수정해야합니다.

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 광기의 사용을 중지해야한다.

희망이 도움이됩니다.