2011-08-01 48 views
0

數據庫中,我有2個表:release_serversrelease_components
我有一個鏈接表release_server_to_components保存相關數據與CakePHP的和HABTM

我現在擁有它,這樣每個服務器可以有多個部件和每個部件能在多臺服務器上。

以下是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是每個組件在服務器上(不是每個服務器,也不是每個組件,而是每個服務器上的組件)。我希望能夠輕鬆地爲每個組件添加系統標識並將其插入到數據庫中。

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

+0

可能相關:http://stackoverflow.com/q/6896481/561731 – Neal

回答

1

你想"fake" Ruby's through association with CakePHP.

爲什麼這樣做了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's saveAll() method保存這些數據。或者,您可以生成自己的數據進行保存,只需從表單字段中插入服務器ID和組件ID即可。在該鏈接的頂部,將保存的數據傳遞給模型的保存方法時應該保存數據。

+0

這工作......現在有問題,因爲改變的另一種觀點 – Neal