Cakephp 如何左外连接下一个表?

Cakephp 如何左外连接下一个表?,cakephp,Cakephp,我有两张这样的桌子: 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

我有两张这样的桌子:

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`) 
更新:这是我的模型

  • 出版物模型

  • 出版计数模型

    var$belongsTo=array(
    '发布'=>数组(
    'className'=>'Publication',
    'foreignKey'=>'publication_id',
    '条件'=>'',
    '字段'=>'',
    “订单”=>“
    )
    );
    var$hasMany=array(
    '发布'=>数组(
    'className'=>'Publication',
    'foreignKey'=>'publication_id',
    '条件'=>'',
    '字段'=>'',
    “订单”=>“
    )
    );
    
    } ?>
  • 采集模式

    var$hasMany=array(
    “属性”=>数组(
    'className'=>'Property',
    'foreignKey'=>'collection_id',
    “依赖”=>false,
    '条件'=>'',
    '字段'=>'',
    “订单”=>“”,
    '限制'=>'',
    '偏移量'=>'',
    '独家'=>'',
    “finderQuery'=>”,
    '反查询'=>''
    ),
    '发布'=>数组(
    'className'=>'Publication',
    'foreignKey'=>'collection_id',
    “依赖”=>false,
    '条件'=>'',
    '字段'=>'',
    “订单”=>“”,
    '限制'=>'',
    '偏移量'=>'',
    '独家'=>'',
    “finderQuery'=>”,
    '反查询'=>''
    )
    );
    
    } ?>

  • 您可以在蛋糕中这样做:

    $joins = array(
         array('table' => 'publication_numerations',
           'alias' => 'PublicationNumeration',
           'type' => 'LEFT',
           'conditions' => array(
              'Publication.id = PublicationNumeration.publication_id',
           )
         )
    );
    
    $this->Publication->find('all', array('joins' => $joins));
    
    尝试蛋糕烘焙 模型/控制器/视图,但所有 它加入出版物和 属性,无 出版物编号


    因此,手动创建关联-。似乎您不需要“连接”。通过正确设置关联,您将能够通过在控制器中使用
    find('list')
    获得所需的列表。

    尝试将$join array的type属性'LEFT OUTER'改为'LEFT'

    tnx,这很有用,但我需要更多帮助。。。这是因为在您的过程中生成的sql返回59行,这是正常的。但在cakephp应用程序中,在索引视图上它返回53行。这是我的代码:$joins=array(数组('table'=>'publication\u numerations','alias'=>'PublicationNumeration','type'=>'LEFT','conditions'=>array('publication.id=PublicationNumeration.publication\u id'))$此->发布->查找('all',数组('joins'=>$joins))$this->set('publications',$this->paginate())$本->集(压缩(“出版物”);你能告诉我我做错了什么吗?基本上这意味着一些出版物有不止一个出版物编号。因此,当PublicationNumerations返回时,某些出版物会多次显示。你需要做的是找出你真正想要的数据并相应地调整SQL。你能检查我的模型吗?我已经用他们更新了我原来的帖子。对我来说,它们看起来不错;这就是为什么我在这里寻求帮助。。。tnx!从您的更新中不清楚您发布了哪些模型关联。为每个堆栈添加模型名称。但我猜第一个堆栈是用于
    出版物
    表的。在我看来,在许多联想中似乎有一个错误。这里有“PublicationProperty”,但表名是
    properties
    ,因此正确的类名应该是“Property”。请张贴所有3个型号的关联。好的,这三个型号都有。代码是由论坛提供的,所以它缺少转义标签,如果PublicationNumeration具有ANDBELONGOMANY,则需要另一个同时具有外键:“publication\u id”和“publication\u numeration\u id”的表。PublicationNumeration具有多个关联,假定“publications”表中存在外键“publication\u numeration\u id”,但没有外键。
    $joins = array(
         array('table' => 'publication_numerations',
           'alias' => 'PublicationNumeration',
           'type' => 'LEFT',
           'conditions' => array(
              'Publication.id = PublicationNumeration.publication_id',
           )
         )
    );
    
    $this->Publication->find('all', array('joins' => $joins));