2011-03-09 217 views
0

我有一个资产表,其中包含所有资产类型共享的所有字段,例如, namepathfiletypesizeCakePHP多个HABTM关系

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

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

的问题是,创造一种资产的时候,我想每个资产是一个任一architects_asset一个constructors_asset- 资产永远不是建筑师和建筑师资产。

简单的解决方案是创建architect_assetsconstructors_assets表并删除assets表,因为这样一来,你可以添加,编辑,查看,删除分开各类型。或者,我想我可以在assets控制器中创建architects_asset_addconstructors_asset_add操作,但是我必须对编辑,查看和删除操作进行相同处理,这看起来很臃肿。

你会如何解决这个问题?

回答

1

我已经能够解决这个问题,使用hasMany到的关系。这意味着要为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 
0

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