我有以下表格: 'assets', 'pictures', 'assets_pictures', 'othermodels', 'othermodels_pictures'
等...
从上面你可能已经知道表 'pictures'
用作图像的存储库并且与多个模型相关,包括'assets' .
我想模型 'Asset'
(表 'assets'
),有:
-
hasMany
与'Picture'
的关系(使用表'assets_pictures'
) -
hasOne
与'Cover'
(表'pictures'
)的关系,基于与'Picture.id'
关联的'assets'
中的'cover_id'
字段
到目前为止,当我在 Asset
和 Picture
以及 'Asset' belongsTo 'Cover'
之间 Build HABTM
关系时,它似乎有效 . 不知怎的,这听起来不对,而且更改资产的封面图片会消除该资产的所有 'assets_pictures'
关系,所以我知道了一些损失......
1 回答
这听起来不对,因为您在数据库级别的两个表之间设置了多个关系 . 不知道哪些,但这肯定打破了一些数据库规范化规则 .
想象一下,您稍后决定不仅要追踪封面,还要追踪背面 . 您必须在资产表中添加另一个名为back_id的字段,该字段将指向图片 . 真是个烂摊子......
表示这一点的正确方法是在assets_pictures表中包含一个'type'字段:
您可以将此字段默认为“正常”(或甚至为空),并在需要时将其更改为“覆盖” . 注意,该字段允许附加图片类型(例如“后退”) .
HABTM关系可以解决这个问题而不会出现太多问题 . 参数 'unique'=>'keepExisting' 阻止CakePHP丢弃已经存在的其他关系(这是默认行为) .
但是,事情可能会变得复杂,特别是 when trying to save data . 如果发生这种情况,并且在拔出头发之前,您可能需要沿着'hasMany through'路线走下去 .
为方便起见,要检索信息,您可能需要为模型资产中的Cover设置额外的HABTM关系,如下所示: