CakePHP有多种HABTM关系

时间:2011-03-09 21:28:10

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

我有一个资产表,其中包含所有资产类型共享的所有字段,例如namepathfiletypesize等。

现在,我有2种资产类型:属于architects的资产和属于construtors的资产。所以我在这两种类型上建立了 HABTM 关系,即

      |-------- architects_assets ------- architects
assets|
      |-------- constructors_assets ----- constructors

问题是,在创建资产时,我希望每个资产 中的一个<{1}} a architects_asset - 资产永远不会是架构师和构造函数资产。

简单的解决方案是创建constructors_assetarchitect_assets表并删除constructors_assets表,因为这样您就可以添加,编辑,查看,删除每种类型分开。或者,我想我可以在assets控制器中创建architects_asset_addconstructors_asset_add个动作,但是我必须为编辑,查看和删除做同样的事情,臃肿。

你会如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我已经能够使用 hasMany through 关系来解决这个问题。这意味着为architects_assetsconstrutors_assets创建单独的控制器,但这适合我,因为我需要明确区分两种资产类型。

结果模型:

//asset
class Asset extends AppModel {
  public $hasMany = array('ArchitectAsset', 'ConstructorAsset')
}

//architect asset
class ArchitectAsset extends AppModel {
  public $belongsTo = array('Architect, Asset');
}

//architect
class Architect extends AppModel {
  public $hasMany = 'ArchitectAsset';
}

//and the same for the ConstructorAsset and Constructor models

答案 1 :(得分:0)

我认为修改资产模型以添加新的CRUD方法来支持这两个操作将是一个好主意 当然它会让你的模型代码更大,但它允许你将所有资产保存在同一个表上,以防你需要对它们做一些与架构或构造函数关系无关的操作。