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

我有一个选择菜单,用户可以在其中选择特定功能,并根据他们选择的内容显示一个带有新选项的新选择菜单。根据他们选择的内容,此过程可以重复几次。


例如,如果选择菜单显示以下项目: apple, mango, orange.


用户选择apple:他们将获得与苹果相关的三个附加选项–例如,brown, red, green.如果用户选择orange,他们可能会看到red, orange.红色显示两次。


我的主要问题是有一个很好的追踪方法。


我目前的解决方案

我有两个桌子-features和feature_group.


feature_group有列:id,name features有列:id,group_id,name,links


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


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


feature_group 桌子:


| id | name   |

|----|--------|

| 1  | Fruit  |

| 2  | Colour |

| 3  | Taste  |

features 桌子:


| 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列包含id的features在同一个表。因此,例如,Red当用户选择任何选项时,带有名称的第四行是可见的Apple, Mango, Orange.


同样,如果他们不能选择第一个选项和第二个选项,则不能选择Bad第三个选项。MangoRed


将;用于包括其他选项对也是如此。


我希望这是有道理的。


这是我的表结构。在代码中,我将其作为数组:


$color = [

    'Apple'  => [

        'Red',

        'Green',

    ],

    'Mange'  => [

        'Red',

        'Green',

    ],

    'Orange' => [

        'Red',

        'Orange',

    ],

];


$taste = [

    'Red' => [

        'Slicy'

    ],

    // so on...

];

我认为这不是最好的方法。特别是如果以后要添加更多内容,则必须大量修改数据,这可能会很麻烦。


如何解决此问题?


偶然的你
浏览 124回答 1
1回答

慕娘9325324

既然您想拥有尽可能深入的自由,那么以下解决方案可能会起作用: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 -> AppleCider -> Party -> Happy -> Cake -> Birthday困难在于管理功能的数量。评论后更新由于水平深度的数量无限,一次加载所有选项并不明智。因此,我们被迫通过执行单独的请求来加载下一个功能。首先,我们可以返回给定功能的所有子代:用户选择第一个功能id 1。正在进行API调用,并返回id 1response的所有子级[2, 3]。填写新的选择输入。用户选择第二个功能id 2。正在进行API调用,并返回id 2response的所有子级[4]。...我认为,如果我误会了,请原谅,也有可能让每个功能都由不同的孩子来照顾前任父母。但是,这需要更多的逻辑。例子:Apple -> RedApple -> GreenRed -> Apple -> TastyRed -> Apple -> Cake我们可以看到,Apple有两个孩子的特点Red和Green。但是,当我们Red作为父母时,我们就会看到它Apple具有两个不同的功能,Tasty和Cake。需要执行以下步骤。用户选择第一个功能Red。获取具有Red作为父级的所有功能。这是Apple在给定的例子。用户选择Apple。获取所有具有Apple作为父级和Apple具有Red作为父级的对象。是Tast和Cake。
打开App,查看更多内容
随时随地看视频慕课网APP