簡體   English   中英

使用cakephp和HABTM將關聯數據保存到數據庫中

[英]Save associated data into database with cakephp and HABTM

我有2個表: release_serversrelease_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,並將其插入數據庫中。

如果需要,我可以提供模型和控制器的代碼。

您想通過與CakePHP的關聯“偽造” Ruby。

為什么通過HABTM執行此操作?

因為您要保存有關關聯的數據。 使用Cake的HABTM很難保存有關關聯的數據,因為您真正擁有的唯一一個就是JOIN表。 您需要比這更強大的功能。

首先,擺脫模型中的$hasAndBelongsToMany屬性。 接下來,我們將把您的release_server_to_components表重新設置為“通過”表。

因此,在ReleaseComponentReleaseServer模型中,您將具有以下關聯:

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM