我希望有人愿意看看这种多对多的关系。这个例子适用于Laravel项目,但具体细节不应该太重要。
行动
+----+------+--------+-------------+------+--------+------------+
| id | name | script | description | icon | custom | project_id |
+----+------+--------+-------------+------+--------+------------+
管道(action_server
这是数据透视表)
+----+-----------+-----------+-------+
| id | action_id | server_id | order |
+----+-----------+-----------+-------+
服务器
+----+------+------------+------------+
| id | name | ip_address | project_id |
+----+------+------------+------------+
这种多对多关系用于部署服务器,操作是部署管道的一部分。
project_id
获取部署管道的所有操作这个概念在Laravel中起作用,我可以根据给定的project_id
简单地获取我的动作。反过来,我可以使用action->servers()
获取运行部署所需的服务器操作。
我需要一种方法来添加默认操作。我希望能够提供具有预定义脚本的操作,以供用户选择和添加到部署管道,而不是总是拥有用户提供的脚本。
这些预定义的动作不能填充在action
表中,因为那里定义的动作与project_id
相关联。这些必须是通用的。
我不能简单地在我当前的设置中为这些预定义的动作创建另一个表,因为我的管道中的action_id
已经设置了外键。
到目前为止,我觉得我混合了两个概念,即pre-defined
动作和用户自己创建的user-defined
动作。它们需要在同一个管道中,并最终以正确的顺序运行。
有关如何实现这一点的任何想法?我对所有建议持开放态度。
编辑
在绘制出来之后,似乎可能的解决方案是以action_project
的形式添加另一个数据透视表,这允许我从project_id
表中解耦(移除)action
。我想知道如何在Laravel中保持这种清洁。
action_project
+----+-----------+------------+
| id | action_id | project_id |
+----+-----------+------------+
从概念上总结您的问题:
我认为你需要的只是对自定义动作和标准动作的概括,对应于包含两种情况的超类“动作”。这导致以下表格:
actions(id, type, name, description)
与type
是custom
或standard
custom_actions(id, script, icon, custom, project_id)
或者,您可以将custom_actions
的属性附加到actions
,并将它们全部为NULL以用于标准操作。