Mysql CakePHP模型之间的两种关系
我有以下表格:Mysql CakePHP模型之间的两种关系,mysql,database,cakephp,cakephp-2.0,Mysql,Database,Cakephp,Cakephp 2.0,我有以下表格:“资产”、“图片”、“资产图片”、“其他模型”、“其他模型图片”,等等 从上面可以看出,表'pictures'作为图像的存储库,与多个模型相关,包括“资产” 我希望模型“资产”(表“资产”)具有: 与'Picture'有许多关系(使用表'assets\u pictures') 与'Cover'(表'pictures')有一个关系,该关系基于'assets'中与'Picture.id'关联的'Cover\u id'字段 到目前为止,当我设置HABTM在资产和图片之间的关系,以及属于“
“资产”、“图片”、“资产图片”、“其他模型”、“其他模型图片”
,等等
从上面可以看出,表'pictures'
作为图像的存储库,与多个模型相关,包括“资产”
我希望模型“资产”
(表“资产”
)具有:
与'Picture'
有许多关系(使用表'assets\u pictures'
)
与'Cover'
(表'pictures'
)有一个关系,该关系基于'assets'
中与'Picture.id'关联的'Cover\u id'
字段
到目前为止,当我设置
HABTM
在资产
和图片
之间的关系,以及属于“封面”的“资产”时,它似乎起到了作用。不知何故,这听起来并不正确,而且更改资产的封面图片会清除该资产的'assets\u pictures'
中的所有HABTM
关系,因此我知道这里有问题。我不知所措…这听起来不对,因为您正在数据库级别设置两个表之间的多个关系。不确定是哪一个,但这肯定打破了一些数据库规范化规则
想象一下,稍后您决定不仅要跟踪封面,还要跟踪背面。您必须向资产表中添加另一个名为back_id的字段,该字段将指向图片。真是一团糟
表示这一点的正确方法是在assets_pictures表中包含一个“type”字段:
您可以将此字段默认为“正常”(甚至为空),并在需要时将其更改为“覆盖”。请注意,此字段允许其他图片类型(例如“back”)
HABTM关系可以处理此问题,而不会出现太多问题。参数'unique'=>'keepExisting'防止CakePHP删除已经存在的其他关系(这是默认行为)
然而,“丰富”的HABTM关系会使事情变得复杂,尤其是在试图保存数据时。如果发生这种情况,在你拔头发之前,你可能想沿着这条路线走下去
为方便起见,为了检索信息,您可能需要为模型资产中的覆盖设置一个附加的HABTM关系,该关系如下所示:
public $hasAndBelongsToMany = array(
'Cover' => array(
'className' => 'Picture',
'conditions' => array('AssetCover.type' => 'cover'),
)
很可能你必须设置'unique'=>'keepExisting'
在建立你的HABTM关系时,请看一下百万伊尼戈·弗洛雷斯的感谢信。。。!这很有道理!伟大的我很高兴这有帮助。