Как покинуть внешнее соединение следующих таблиц? - PullRequest
0 голосов
/ 26 августа 2010

У меня есть две таблицы, подобные этой:

CREATE TABLE IF NOT EXISTS `publications` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numerated` tinyint(1) NOT NULL DEFAULT '0',
  `title` text COLLATE utf8_unicode_ci,
  `collection_id` int(11) NOT NULL,
  `note` text CHARACTER SET utf8,
  `adminNote` text CHARACTER SET utf8,
  PRIMARY KEY (`id`),
  KEY `collectionId` (`collection_id`)
  KEY `numerated` (`numerated`),
) ;



CREATE TABLE IF NOT EXISTS `publication_numerations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `publication_id` int(11) NOT NULL,
  `published` tinyint(1) NOT NULL DEFAULT '0',
  `book` int(11) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `publication_id` (`publication_id`)
) ;



CREATE TABLE IF NOT EXISTS `properties` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `publication_id` int(11) NOT NULL,
  `value` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `publication_id` (`publication_id`)
) 

Все, что мне нужно, - это иметь список всех записей из публикаций таблиц и публикации_числений. Попробовал с тортом испечь модель / контроллер / вид, но все время включается публикации и свойства, без публикации_числения.

Можете ли вы помочь мне решить эту проблему?

Заранее большое спасибо!

ОБНОВЛЕНО: так что все, что мне нужно, это создать и использовать его как запрос по умолчанию:

SELECT * FROM `publications` 
LEFT JOIN `publication_numerations` ON (`publications`.`id` = publication_numerations.`publication_id`) 

ОБНОВЛЕНО: вот мои модели

  1. публикация модели

        var $hasOne = array(
            'Publisher' => array(
                'className' => 'Publisher',
                'foreignKey' => 'publication_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            ), 
        );
    
        var $belongsTo = array(
            'Collection' => array(
                'className' => 'Collection',
                'foreignKey' => 'collection_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    
        var $hasMany = array(
            'PublicationProperty' => array(
                'className' => 'PublicationProperty',
                'foreignKey' => 'publication_id',
                'dependent' => false,
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'exclusive' => '',
                'finderQuery' => '',
                'counterQuery' => ''
            ),
            'PublicationNumeration' => array(
                'className' => 'PublicationNumeration',
                'foreignKey' => 'publication_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    
    }
    ?>
    
  2. PublicationNumeration модель

    var $belongsTo = array( 'Publication' => array( 'className' => 'Publication', 'foreignKey' => 'publication_id', 'conditions' => '', 'fields' => '', 'order' => '' ) ); var $hasMany = array( 'Publication' => array( 'className' => 'Publication', 'foreignKey' => 'publication_id', 'conditions' => '', 'fields' => '', 'order' => '' ) ); } ?>
  3. Режимы сбора

    var $hasMany = array( 'Property' => array( 'className' => 'Property', 'foreignKey' => 'collection_id', 'dependent' => false, 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'exclusive' => '', 'finderQuery' => '', 'counterQuery' => '' ), 'Publication' => array( 'className' => 'Publication', 'foreignKey' => 'collection_id', 'dependent' => false, 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'exclusive' => '', 'finderQuery' => '', 'counterQuery' => '' ) ); } ?>

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Вы можете делать соединения в торте так:

$joins = array(
     array('table' => 'publication_numerations',
       'alias' => 'PublicationNumeration',
       'type' => 'LEFT',
       'conditions' => array(
          'Publication.id = PublicationNumeration.publication_id',
       )
     )
);

$this->Publication->find('all', array('joins' => $joins));
0 голосов
/ 14 ноября 2012

Попробуйте сделать атрибут type для $ join array 'LEFT OUTER' вместо 'LEFT' .

0 голосов
/ 27 августа 2010

попробовал с тортом испечь модель / контроллер / вид, но все раз это объединяет публикации и свойства, без publication_numerations.

Итак, создайте ассоциации вручную - Ассоциации: связывание моделей вместе . Не похоже, что вам нужны «соединения». Правильно установив ассоциации, вы сможете получить необходимый список, используя find('list') в вашем контроллере - http://book.cakephp.org/view/1017/Retrieving-Your-Data#find-list-1022.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...