2013-12-13 3 views
2

cakephp에서 LEFT 조인을 사용하여 데이터를 선택하려고합니다. 여기 LEFT 조인을 위해 두 개 이상의 테이블을 사용할 수 있습니다. 여기에서 iam은 두 테이블 간의 LEFT 조인을 만듭니다. news_feeds 및 news_feed_likes.i는 두 개를 도입하려고합니다. 더 많은 표를 여기에, NewsFeedComments 및 newsfeed_likes_comments.How 내가 어떻게 할 수 있을까? 당신의 도움에 대한cakephp에서 왼쪽 조인 만들기

덕분에 조언

$this->paginate = array(
    'conditions' => array('NewsFeed.group_id'=>$groupdata['Group']['id'],'NewsFeed.status'=>'A'), 
    'joins' => array(
     array(
      'alias' => 'newslikes', 
      'table' => 'news_feed_likes', 
      'type' => 'LEFT', 
      'conditions' => array(
       'newslikes.news_feed_id = NewsFeed.id', 
       'newslikes.user_id'=>$this->Auth->user('id'), 
       'newslikes.status'=>'1', 
      ), 
     ), 
     array(
      'alias' => 'newscommentslikes', 
      'table' => 'news_feed_comments_likes', 
      'type' => 'LEFT', 
      'conditions' => array(
       'newscommentslikes.news_feed_comment_id = NewsFeedComment.id', 
       'newscommentslikes.user_id'=>$this->Auth->user('id'), 
       'newscommentslikes.status'=>'1', 
      ), 
     ), 
    ), 
    'fields' => array(
     'IFNULL(newslikes.user_id,0) AS likestatus', 
     'NewsFeed.id', 
     'NewsFeed.posted_message', 
     'NewsFeed.created', 
     'NewsFeed.user_id', 
     'NewsFeed.status', 
     'NewsFeed.newslike', 
     'IFNULL(newslikes.status,0) AS status', 
    ), 
    'order' => array('NewsFeed.created' => 'desc'), 
); 

$this->set('newsfeed', $this->paginate($this->NewsFeed)); 
+0

'=> 배열 (어레이 (.. .. 제 가입), 어레이 (.. 제 가입 ..)'결합 ', ... , array (.. nth join ..));'조인 배열에 배열을 더 추가하려고 했습니까? – iso27002

+0

이 시도하고 다시 얻을 – user1851420

+0

위의 코드를 확인하십시오, 위의 코드를 확인하십시오. 오류가 발생합니다. 'On clause'에 알 수없는 열 'NewsFeedComment.id'가 있습니다. 여기에 다른 모델 NewsFeedComment를 어떻게 사용할 수 있습니까? – user1851420

답변

3

나의 첫번째 비트는 모델에이 이동하는 것을 고려하는 것입니다. 그러나 특정 질문에 대답하려면 외래 키를 기반으로 조인을 추가하십시오. 당신이 NewsFeedLike와 NewsFeedLikeComments 사이에 외래 키가 경우에 따라서, 예를 들어, 당신은 단지 또 다른과 같이 결합 추가 할 수 있습니다 : 당신은 이미 NewsFeedLike에 가입되어 있기 때문에

'joins' => array(
    array(
     'table' => 'news_feed_like_comments', 
     'alias' => 'NewsFeedLikeComment', 
     'type' => 'LEFT', 
     'conditions' => array(
      'NewsFeedLikeComment.news_feed_like_id = NewsFeedLike.id', 
     ), 
    ), 

, 그것은 NewsFeedLikeComment을 제한하는 조건을 사용합니다.

다른 팁 : 코드를 작성할 때 항상 CakePHP 코딩 표준을 따르십시오. 그것은 당신의 삶을 훨씬 덜 고통스럽게 만들 것입니다. 모델에 대해 소문자로 강조 표시된 별칭을 사용하지 마십시오. CamelCase는 대문자와 영문으로 작성하십시오. 그러므로 조인 할 때 newslikesnewscommentslikes 대신 별칭을 사용하려면 NewsLikeNewsCommentLike을 사용해야합니다.

-1

하면 아래 구문을 사용하여 다중 테이블 참여할 수

$this->paginate = array(
     'conditions' => array(), 
     'joins' => array(
      array(
       'alias' => 'TableAlias1', 
       'table' => 'table_name_1', 
       'type' => 'LEFT', 
       'conditions' => array(
        'TableName.id = table_name_1.id', 
       ), 
      ), 
      array(
       'alias' => 'TableAlias2', 
       'table' => 'table_name_2', 
       'type' => 'LEFT', 
       'conditions' => array(
        'TableName.id = table_name_2.id', 
       ), 
      ), 
      array(
       'alias' => 'TableAlias3', 
       'table' => 'table_name_3', 
       'type' => 'LEFT', 
       'conditions' => array(
        'TableName.id = table_name_4.id', 
       ), 
      ) 
     ), 
     'fields' => array(), 
     'order' => array() 
    ); 
+0

조인이 작동하는 동안 코딩 표준에서는 조건의 별칭과 일치해야한다고 제안합니다. 예를 들어, 첫 번째 조인에서는 조건을 ''TableName.id = table_name_1.id '로 설정합니다. 그러나 별칭은'TableAlias1'입니다. 조건은 다음과 같은 별칭과 일치해야합니다 : ''TableName.id = TableAlias1.id''. –

+0

예 척 ... 별칭이 일치해야합니다. – Anubhav