Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql CakePHP模型之间的两种关系_Mysql_Database_Cakephp_Cakephp 2.0 - Fatal编程技术网

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关系时,请看一下百万伊尼戈·弗洛雷斯的感谢信。。。!这很有道理!伟大的我很高兴这有帮助。