[英]Save associated data into database with cakephp and HABTM
我有2个表: release_servers
和release_components
我有一个链接表release_server_to_components
我现在拥有它,以便每个服务器可以具有多个组件,并且每个组件可以位于多个服务器上。
以下是create语句:
CREATE TABLE `release_components` (
`id` int(11) NOT NULL auto_increment,
`buildID` varchar(45) default NULL,
`svnNumber` varchar(45) NOT NULL,
`componentType` varchar(45) NOT NULL,
`release_id` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
CREATE TABLE `release_servers` (
`id` int(11) NOT NULL auto_increment,
`server_name` varchar(45) NOT NULL,
`server_environment` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
链接表:
CREATE TABLE `release_server_to_components` (
`id` int(11) NOT NULL auto_increment,
`release_component_id` int(11) NOT NULL,
`release_server_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
我要添加的是具有系统ID的功能-此系统ID将是服务器上的每个组件(不是每个服务器,也不是每个组件,而是每个服务器上的每个组件)。 我希望能够轻松地为每个组件添加系统ID,并将其插入数据库中。
如果需要,我可以提供模型和控制器的代码。
为什么通过HABTM执行此操作?
因为您要保存有关关联的数据。 使用Cake的HABTM很难保存有关关联的数据,因为您真正拥有的唯一一个就是JOIN
表。 您需要比这更强大的功能。
首先,摆脱模型中的$hasAndBelongsToMany
属性。 接下来,我们将把您的release_server_to_components
表重新设置为“通过”表。
因此,在ReleaseComponent
和ReleaseServer
模型中,您将具有以下关联:
$hasMany = array('ReleaseServerToComponent');
现在,在新的ReleaseServerToComponent
模型中,您将具有以下关联:
$belongsTo = array('ReleaseComponent', 'ReleaseServer');
现在,您可以像普通的Cake模型一样访问此表,即$this->ReleaseServer->ReleaseServerToComponent->find()
。 您可以将其他字段添加到穿透表,例如server_component_name
。 您已经具有带有release_server_to_components
表的主键的特定服务器组件的唯一标识符。
您可以使用Cake的saveAll()
方法保存此数据。 或者,您可以生成自己的数据进行保存,只需从表单字段中插入服务器ID和组件ID。 在该链接的顶部是将格式的数据传递给模型的save方法时应采用的格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.