gpt4 book ai didi

php - Laravel - 在数据库中存储动态选项的问题?

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:48 25 4
gpt4 key购买 nike

我有一个选择菜单,用户可以在其中选择特定功能,并且根据他们的选择,会显示一个包含新选项的新选择菜单。根据他们的选择,这个过程可以重复多次。

例如,如果选择菜单显示这些项目:apple、mango、orange。

然后用户选择 apple:他们将获得三个与苹果相关的附加选项 - brown、red、green。 如果用户选择 orange 例如,他们可能会看到 红色、橙色。 请注意,红色出现了两次。

我的主要问题是找到一种追踪它的好方法。

我目前的解决方案

我有两个表 - featuresfeature_group。

feature_group 包含列:idnamefeatures 包含列:idgroup_idnamelinks

如果我们回到前面的例子,

我目前将选项存储在 links 部分。

feature_group表:

| id | name   |
|----|--------|
| 1 | Fruit |
| 2 | Colour |
| 3 | Taste |

特征表:

| id | group_id | name   | links     |
|----|----------|--------|-----------|
| 1 | 1 | Apple | |
| 2 | 1 | Mango | |
| 3 | 1 | Orange | |
| 4 | 2 | Red | 1,2,3 |
| 5 | 2 | Green | 1,2 |
| 6 | 2 | Orange | 3 |
| 7 | 3 | Slicy | 1,2;1,2,3 |
| 8 | 3 | Okay | 1,2,3,4 |
| 9 | 3 | Bad | 2,4 |

如您所见,links 列包含same 表中featuresid。因此,例如,当用户选择任何选项 Apple、Mango、Orange 时,名称为 Red 的第 4 行是可见的。

同样,如果他们不能选择 Bad 作为第三个选项,如果他们为第一个选项选择了 MangoRed 以外的任何选项第二个选项。

; 也用于包含其他选项对。

我希望这是有道理的。

这是我的表结构。在代码中,我将它作为一个数组来做:

$color = [
'Apple' => [
'Red',
'Green',
],
'Mange' => [
'Red',
'Green',
],
'Orange' => [
'Red',
'Orange',
],
];

$taste = [
'Red' => [
'Slicy'
],
// so on...
];

我认为这不是最好的方法。特别是如果我以后想添加更多的东西,那么我必须修改我的数据很多,这会很麻烦。

如何解决这个问题?

最佳答案

由于您想自由地尽可能深入,因此可以使用以下解决方案:

Table: features

| id | name |
|----|-------|
| 1 | Apple |
| 2 | Red |
| 3 | Green |
| 4 | Sweet |
| 5 | Sour |
| 6 | Cake |
| 7 | Cider |

Table: feature_parent_child // maybe you have a better name

| parent_id | child_id |
|-----------|----------|
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |

如果我们遵循我们的关系,我们最终会得到:

Apple -> Red -> Sweet -> Cake -> ...
Apple -> Green -> Sour -> Cider -> ...

这样我们就可以想深入就深入。我们也可以将其他特征的子特征作为“根”特征:

Cake -> Sugar -> Sweet -> Apple
Cider -> Party -> Happy -> Cake -> Birthday

困难在于管理特征的数量。

评论后更新

由于关卡深度无限,一次加载所有选项并不明智。因此,我们被迫通过执行单独的请求来加载下一个功能。

首先,我们可以返回给定特征的所有子元素:

  1. 用户选择第一个特征 id 1
  2. 正在进行 API 调用并返回 id 1 的所有子项,响应 [2, 3]
  3. 填写一个新的选择输入。
  4. 用户选择第二个特征 id 2
  5. 正在进行 API 调用并返回 id 2 的所有子项,响应 [4]
  6. ...

我认为,如果我弄错了,请原谅,也可以根据其先前的 parent 为每个特征赋予不同的 child 。然而,这需要更多的逻辑。

例子:

Apple -> Red
Apple -> Green

Red -> Apple -> Tasty
Red -> Apple -> Cake

我们可以看到 Apple 有两个子特征 RedGreen。然而,一旦我们将 Red 作为父级,我们就可以看到 Apple 有两个不同的功能,TastyCake。需要执行以下程序。

  1. 用户选择第一个特征红色
  2. 获取所有以 Red 为父级的特征。在给定的示例中是 Apple
  3. 用户选择 Apple
  4. 获取所有以 Apple 为父级且 AppleRed 为父级的对象。分别是 TastCake

关于php - Laravel - 在数据库中存储动态选项的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com