2014-01-09 4 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))); 

Это длинный код, но работает быстро и легко понять. Другой способ - использовать подзапросы, но они уродливы и могут замедлить ваше приложение.

Смежные вопросы