【问题标题】:Save associated data into database with cakephp and HABTM使用 cakephp 和 HABTM 将相关数据保存到数据库中
【发布时间】:2011-08-01 19:16:39
【问题描述】:

我有 2 张桌子:release_serversrelease_components
我有一个链接表release_server_to_components

我现在拥有它,以便每个服务器可以有多个组件,并且每个组件可以位于多个服务器上。

以下是创建语句:

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 并将其插入到数据库中。

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

【问题讨论】:

标签: php mysql cakephp join has-and-belongs-to-many


【解决方案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。该链接的顶部是保存数据时应采用的格式,当您将其传递给模型的保存方法时。

【讨论】:

  • 这行得通...现在由于更改而出现了另一个视图的问题
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 2011-09-14
  • 2013-09-24
  • 1970-01-01
  • 2012-08-08
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多