2014-05-23 3 views
0

에 LeftJoin를 Mime으로 찾기 :내가 3 개 모델이 CakePHP의

  1. 사용자를
  2. 처럼 포스트

user_idpost_id (에 CakePHP의 규칙을 사용하여 2 외래 키 세트가 있습니다 다른 두 모델의 id 열).

외래 키에 조건이있는 Post의 SQL에서 LEFT JOIN이 마임 인 찾기를 실행하고 싶습니다. 상세

내가 원하는 :

  • 1 : 모든 게시물.
  • 1a : 게시물에 사용자 XXX 님과 같은 게시물이있는 경우 결과에 포함 시키길 원합니다.
  • 1b : 게시물에 -> 좋아요 속성이 없습니다.

그래서, 내가이 작업을 수행 할 경우 : $ 게시물에

$posts = $this->Post->find('all'); 

내가 모든 게시물 있고, 각 게시물에 대한 모든 좋아. 내가 좋아하는 뭔가를 작성해야 같은 책을 읽고

, 느낌 :

$options['joins'] = array(
    array('table' => 'likes', 
     'alias' => 'Likes', 
     'type' => 'LEFT', 
     'conditions' => array(
      'Post.id = Likes.post_id', 
      'Likes.user_id = 536f6a29-babc-4724-a74d-2ce100000000' 
     ) 
    ) 
    ); 


    $posts = $this->Post->find('all', $options); 

을하지만이 작동하지 않습니다.

희망이 있습니다.

+0

당신이 발생하는 문제가 무엇인지 이미 시도하고 무엇을 우리에게 보여 컨트롤러 필요가 없다. – Thibault

+0

책에서 조인과 '컨테이너'동작을 확인하십시오. 그들은 당신을 도울 수 있습니다 : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html; http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html – Eagle

답변

1

잘 당신은 당신의 모델

class User extends AppModel 
{ 
    public $useTable = 'users'; 
    public $primaryKey = 'id'; 
    public $hasMany = array(
    'Post', 
    'Like' 
    ); 
} 

class Post extends AppModel 
{ 
    public $useTable = 'posts'; 
    public $primaryKey = 'id'; 
    public $belongsTo = array('User'); 
    public $hasMany = array(
     'Like' 
    ); 
} 
class Like extends AppModel 
{ 
    public $useTable = 'likes'; 
    public $primaryKey = 'id'; 
    public $belongsTo = array('Post','User'); 
} 

에 넣고 당신을

$this->loadModel("User"); 
$query = $this->User->find('all', array(
     'joins' => array(
       array(
       'table' => 'posts', 
       'alias' => 'Post', 
       'type' => 'LEFT', 
       'conditions' => array(
       'User.id = Post.user_id' 
       ) 
      ), 
      array(
       'table' => 'likes', 
       'alias' => 'Like', 
       'type' => 'LEFT', 
       'conditions' => array(
       'User.id = Like.user_id' 
       ) 
      ) 
     ), 
      'conditions' => array(
      'Post.id = Likes.post_id', 
      'Likes.user_id = 536f6a29-babc-4724-a74d-2ce100000000' 
     ), 
      'order' => array(
      'Post.id' => 'ASC' 
     ), 
      'fields' => array('Post.*','User.id'), 

      'recursive' => -1 
     )); 
+0

id 및 useTable 모델의 선언이 필수입니까? 아니면 올바른 명명 규칙을 사용하면 생략해도됩니까? – Snick

+1

생략 할 수있는 규칙을 사용하는 경우 – CoolLife