[英]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.