Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 具有另一个联接表id的联接表_Mysql_Cakephp_Orm_Associations_Cakephp 3.0 - Fatal编程技术网

Mysql 具有另一个联接表id的联接表

Mysql 具有另一个联接表id的联接表,mysql,cakephp,orm,associations,cakephp-3.0,Mysql,Cakephp,Orm,Associations,Cakephp 3.0,我目前正在尝试为一个项目构建后端。在这个项目中,您将能够创建“ContentElements”,用于显示页面中的内容(以我的网站为例)。每个ContentElement都可以有多个选项。当用户使用ContentElement(例如header)创建新站点时,他将输入该元素的所有选项。例如: "src": "/img/bg.jpg", "text": "Lorem ipsum..." 为了保存该选项在其中使用的每页的值,我将这些值存储在一个单独的表中(content\u elements\u s

我目前正在尝试为一个项目构建后端。在这个项目中,您将能够创建“ContentElements”,用于显示页面中的内容(以我的网站为例)。每个ContentElement都可以有多个选项。当用户使用ContentElement(例如header)创建新站点时,他将输入该元素的所有选项。例如:

"src": "/img/bg.jpg",
"text": "Lorem ipsum..."
为了保存该选项在其中使用的每页的值,我将这些值存储在一个单独的表中(content\u elements\u sites\u values)

我的方案目前如下所示:

因此,我目前试图做的是,当我获取与站点相关的所有数据时,我还希望从“内容\元素\站点\值”获取数据

$site = $this->Sites->get($id, [
        'contain' => ['Templates', 'Colors', 'SiteTypes', 'ContentElements' => [
            'ContentElementOptions' => [
                'ContentElementsSitesValues'
                ]
            ]
        ],
        'conditions' => [
            // Just to explain my problem.
            'ContentElementsSites.id' => 'ContentElementsSitesValues.content_elements_sites_id'
        ]
    ]);
我真的不知道这是否可能,或者我的“设计”是否完全是胡说八道。但我想不出另一种方法来存储填写的数据。我非常乐意接受关于存储这些数据的更好方法的建议。请询问您是否需要更多信息以帮助我

提前谢谢你


编辑

我试图更好地解释我想要实现的目标

每个站点可以有多个相同类型的内容元素(关联存储在内容元素连接表中)。
每个内容元素可以有多个内容元素选项

(int) 1 => object(App\Model\Entity\ContentElementOption) {
    'id' => (int) 7,
    'content_element_id' => (int) 1,
    'name' => 'Test',
    'json_name' => 'test',
    'option_type_id' => (int) 1,
    'content_elements_sites_value' => null,             
}
所有内容元素选项内容元素均由管理员定义

另一个用户可以创建一个站点,并用内容元素填充该站点,然后为所有内容元素选项输入内容元素站点值
。由于同一内容元素(例如段落或列表)可能在同一站点中多次出现,我需要存储用户输入的每个内容元素站点值

这就是为什么我创建了内容元素站点内容元素选项之间的链接

目前,我正在使用此查询获取除值以外的所有内容:

$site = $this->Sites->find('all', [
        'conditions' => [
            'Sites.id' => $id
        ],
        'contain' => ['ContentElements' => [
                'sort' => [
                    'ContentElementsSites.order' => 'ASC'
                ],
                'ContentElementOptions' => [
                    'ContentElementsSitesValues' => [
                        'conditions' => [
                            'ContentElementsSitesValues.content_elements_sites_id' => 'ContentElementsSites.id',
                        ]
                    ]
                ]
            ]
        ]
    ]);
这会导致内容元素站点值为空

(int) 1 => object(App\Model\Entity\ContentElementOption) {
    'id' => (int) 7,
    'content_element_id' => (int) 1,
    'name' => 'Test',
    'json_name' => 'test',
    'option_type_id' => (int) 1,
    'content_elements_sites_value' => null,             
}
我的方案目前如下所示:


我想知道这个问题是否可行。或者,如果整个事情太灵活了。

也许这就是你想要的:

$site = $this->Sites->get($id, [
    'contain' => ['Templates', 'Colors', 'SiteTypes', 'ContentElements', 'ContentElements.ContentElementOptions','ContentElements.ContentElementOptions.ContentElementsSitesValues'],
....]);

别忘了在模型表中定义关联关系。

也许这就是您要寻找的:

$site = $this->Sites->get($id, [
    'contain' => ['Templates', 'Colors', 'SiteTypes', 'ContentElements', 'ContentElements.ContentElementOptions','ContentElements.ContentElementOptions.ContentElementsSitesValues'],
....]);

不要忘记在模型表中定义关联关系。

您定义关系的方式意味着您希望采用非常模块化的方法,以便一个内容元素可以用于多个站点,一个内容元素选项可以用于多个内容元素

如果是这种情况,架构方向看起来没有什么变化:

1) content\u elements\u sites\u value表可以直接包含site\u id列,而不是content\u elements\u sites\u id列,因为站点对于该表中的条目总是唯一的,所以不需要content\u elements\u sites的连接id

2) 内容元素站点值表可以重命名为内容元素选项值


3) 您可以从content\u elements\u sites和content\u elements\u sites\u values连接表中删除id列。

您定义关系的方式意味着您希望采用非常模块化的方法,以便一个content元素可以用于多个站点,一个content元素选项可以用于多个站点内容元素

如果是这种情况,架构方向看起来没有什么变化:

1) content\u elements\u sites\u value表可以直接包含site\u id列,而不是content\u elements\u sites\u id列,因为站点对于该表中的条目总是唯一的,所以不需要content\u elements\u sites的连接id

2) 内容元素站点值表可以重命名为内容元素选项值


3) 您可以从content\u elements\u sites和content\u elements\u sites\u values连接表中删除id列。

但这只是编写相同查询的另一种方式。我现在正试图重新表述我的问题,但这只是写同样问题的另一种方式。我正在尝试重新表述我的问题。但是,如果我在content\u elements\u sites\u值中设置站点id,则同一页面中不可能出现多个content\u元素。我会更新我的问题,因为我没有说清楚——对不起。但你是对的,这将是非常灵活的。这让我头疼:)我明白了。然后,您可以继续使用content\u elements\u sites\u id。就查询而言,您应该使用matching()而不是contain(),因为您希望根据关联条件限制主表结果。在这里一步一步地进行-首先获取2个关联,检查调试工具包中的查询,直接在数据库中启动它,根据需要进行更改,然后向其中添加第3个关联并重复。但是,如果我在content\u elements\u sites\u值中设置site\u id,则同一页面中不可能出现多次content\u元素。我会更新我的问题,因为我没有说清楚——对不起。但你是对的,这将是非常灵活的。这让我头疼:)我明白了。然后,您可以继续使用content\u elements\u sites\u id。就查询而言,您应该使用matching()而不是contain(),因为您希望根据关联条件限制主表结果。在这里一步一步地进行-首先获取2个关联,检查调试工具包中的查询,直接在数据库中启动它,根据需要进行更改,然后向其中添加第3个关联并重复。