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));