2014-01-09 5 views
0

레코드 형식 2 모델 (예약 및 메시지)을 가져오고 싶습니다. 두 모델 모두 관계가 없습니다.cakephp에서 하나의 모델에서 두 모델을 합치십시오

내가 그 코드를 사용 내가 많이 시도하지만이 작동하지 않음 (http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables)

$options['joins'] = array(
    array('table' => 'books_tags', 
     'alias' => 'BooksTag', 
     'type' => 'inner', 
     'conditions' => array(
      'Book.id = BooksTag.book_id' 
     ) 
    ), 
    array('table' => 'tags', 
     'alias' => 'Tag', 
     'type' => 'inner', 
     'conditions' => array(
      'BooksTag.tag_id = Tag.id' 
     ) 
    ) 
); 

    $options['conditions'] = array(
     'Tag.tag' => 'Novel' 
    ); 

    $books = $Book->find('all', $options); 

답변

0

이 시도 :

BookModel :

public $hasMany = array(
    'BooksTag' => array(
     'foreignKey' => 'book_id' 
    ) 
); 

TagModel :

public $hasMany = array(
    'BooksTag' => array(
     'foreignKey' => 'tag_id' 
    ) 
); 

BooksController :

$this->Book->Behaviors->load('Containable'); 
$this->Book->find('all', array(
    'contain' => array(
     'BooksTag' => array(
      'Tag', 
     ), 
    ), 
)); 
0

많은 쿼리에서이 방법을 선호합니다. 먼저 필요한 태그를 찾을 수 :

$this->loadModel('Tag'); 
    $tag = $this->Tag->find('first', array('conditions' => array('Tag.tag' => 'Novel'))); 
    $tag_id = $tag['Tag']['id']; 

그런 다음 book_ids을 찾을 :
$this->loadModel('BookTag'); 
    $book_ids = $this->BookTag->find('list', array('conditions' => 'BookTag.tag_id' => $tag_id, 'fields' => 'book_id, book_id')); 

는 그런 책을 찾을 수 :

$this->Book->find('all', array('conditions' => array('Book.id' => $book_ids))); 

그것은 긴 코드이지만, 빠른 실행하고 이해하기 쉽다. 또 다른 방법은 하위 쿼리를 사용하는 것이지만 추악하고 애플리케이션 속도가 느려질 수 있습니다.

관련 문제