2012-09-27 1 views
0

나는 모델 이름과 이미지가 두 가지있다. 여기 관계는 이미지와 같이 많은 의견이 있습니다. 이제 내 목록 페이지에서 모든 이미지 세부 정보와 해당 이미지에 대한 의견 만 표시하고 싶습니다. 내가 어떻게해야되는지 전화 해 줄 수 있니? 내가 쿼리를 작성 후 내 반환 데이터는cakephp 2.0 hasmany 관계 데이터 검색

` 배열 (

[0] => Array 
    (
     [Image] => Array 
      (
       [image_id] => 57 
       [user_id] => 1 
       [category_id] => 22 
       [image_title] => scroul 
       [description] => beutifull natural image for the animal 
       [keyword] => scrual 
       [image_price] => 
       [image_name] => 7bf4a72509da5906903c84e88228b9dd.jpg 
       [image_path] => img/uploads/images/original/ 
       [image_available_size] => 
       [like] => 12 
       [size] => 3244 
       [resolution] => 2162 x 1644 
       [i_date] => 1348573022 
       [i_by] => 1 
       [u_date] => 1348573022 
       [u_by] => 1 
       [is_active] => Y 
       [is_deleted] => N 
      ) 

     [Comment] => Array 
      (
       [0] => Array 
        (
         [comment_id] => 5 
         [image_id] => 57 
         [user_id] => 2 
         [comment] => socute 
         [comment_date] => 1348739230 
         [is_active] => N 
         [is_deleted] => N 
        ) 

      ) 

    ) 

[1] => Array 
    (
     [Image] => Array 
      (
       [image_id] => 56 
       [user_id] => 1 
       [category_id] => 22 
       [image_title] => cute dog 
       [description] => cute dog looking 
       [keyword] => 
       [image_price] => 
       [image_name] => d4af899b0d52cccbec94952a3abd0077.jpg 
       [image_path] => img/uploads/images/original/ 
       [image_available_size] => 
       [like] => 8 
       [size] => 620 
       [resolution] => 2592 x 1944 
       [i_date] => 1348572897 
       [i_by] => 1 
       [u_date] => 1348572897 
       [u_by] => 1 
       [is_active] => Y 
       [is_deleted] => N 
      ) 

     [Comment] => Array 
      (
       [0] => Array 
        (
         [comment_id] => 3 
         [image_id] => 56 
         [user_id] => 2 
         [comment] => ohhhhhhh 
         [comment_date] => 1348737968 
         [is_active] => N 
         [is_deleted] => N 
        ) 

      ) 

    ) 

[3] => Array 
    (
     [Image] => Array 
      (
       [image_id] => 55 
       [user_id] => 1 
       [category_id] => 22 
       [image_title] => ships 
       [description] => ships with beutiful green background 
       [keyword] => ship,green,animal,nature,background,eating,white ship 
       [image_price] => 
       [image_name] => c0dfc2432ae047e9160f3ef99880fe87.jpg 
       [image_path] => img/uploads/images/original/ 
       [image_available_size] => 
       [like] => 1 
       [size] => 1831 
       [resolution] => 2520 x 1944 
       [i_date] => 1348572846 
       [i_by] => 1 
       [u_date] => 1348661976 
       [u_by] => 1 
       [is_active] => Y 
       [is_deleted] => N 
      ) 

     [Comment] => Array 
      (
       [0] => Array 
        (
         [comment_id] => 2 
         [image_id] => 55 
         [user_id] => 2 
         [comment] => i like it 
         [comment_date] => 1348737942 
         [is_active] => Y 
         [is_deleted] => N 
        ) 

       [1] => Array 
        (
         [comment_id] => 4 
         [image_id] => 55 
         [user_id] => 2 
         [comment] => good scene 
         [comment_date] => 1348738004 
         [is_active] => N 
         [is_deleted] => N 
        ) 

      ) 

    ) 

) 위의 배열

` 해당 이미지의 모든 주석이 있습니다. 나는 여기에 코멘트 목록을 원한다. 단지 코멘트가 필요 없다. 사전에 감사합니다.

답변

1

사용중인 find 문을 게시 할 수 있습니까? 당신은 문서에서 특정 수준으로 재귀 설정할 수 있습니다

  • -1 케이크 그룹 데이터는 조인 더 가져 없습니다.
  • 0 케이크 그룹 데이터와 그 도메인
  • 1 케이크가 그룹을 가져, 그 도메인 및 관련 사용자
  • 이 케이크는 그룹, 그 도메인, 관련 사용자 및 사용자의 관련 기사
  • 를 가져를 가져옵니다

    $this->Model->find('all', array('recursive' => -1)); 
    

    또한 0이있다 : 당신은 단지 현재의 모델에서 데이터를 원하는 경우

그래서 다음을 호출 할 수 있습니다동작을 사용하면 find을 호출 할 때 검색 할 Model 데이터를 지정할 수 있습니다.

게시물 모델이 hasMany 인 것으로 가정 해 보겠습니다. 제대로 포함 된 포스트 모델의 함유 성 행동 호출은 다음과 같습니다

$this->Post->find('all', array(
'conditions' => array('Post.id' => 1), 
'contain' => array('Image') 
)); 

편집 : 때문에 내가 당신의 처음 질문을 오해 철자와 형식의 . "설명이 없습니다"을 데이터 배열에 표시하려면 "의견 개수" 만 표시하면됩니다.

의견 수를 원하면 Kishor Kundan이 제안한대로 counterCache을 사용하십시오.

1

Cake는 또 다른 놀라운 마법 인 "counterCache"를 제공합니다.

당신은

public $belongsTo = array(
    'className' => 'Image', 
    'foreignKey' => <your_foreign_key>, 
    ... 
    ... 
    'counterCache' => true 

); 

그런 다음 당신은 당신의 이미지 테이블의 필드, 'COMMENT_COUNT'를 추가하여 댓글 모델의 counterCache을 정의 할 수 있습니다 (또는 모델의 이미지에 의해 사용되는 테이블)과 케이크 것이다 나머지는 너를해라.

이것은 덧글을 추가/삭제할 때마다 오버 헤드를 추가하지만 이미지 데이터를 가져올 때마다 '카운트'를 발행하는 것보다 훨씬 나은 대안입니다.

자세한 내용은 the cookbook을 확인하십시오. 거기에 "counterCache"가 있는지 확인하십시오.

UPDATE :

은 나에게 매우 도움이

public $belongsTo = array(
    'className' => 'Image', 
    'foreignKey' => <your_foreign_key>, 
    ... 
    ... 
    'counterCache' => true, 
    'counterScope' => array('Image.active' => 1) 

); 
+0

으로 추가 속성 'counterScope'를 사용하지만 여전히 내가 한 문제가, 카운터 캐시 범위를 제한 할 수 있습니다. 내 프로젝트에서 사용자가 주석을 추가하면 기본적으로 주석이없는 상태에서 comment_count의 이미지 마스터 값도 1 씩 증가합니다. 관리자가 해당 댓글을 활성화하면 comment_count를 늘리고 싶습니다. 너 나 좀 도와 줄 수있어? –