将复选框值存储到数据库的最佳方法?

时间:2014-04-03 15:13:56

标签: php mysql laravel-4 checkboxlist

我有一个简单的任务要完成,我不知道最好的方法是什么。

我的数据库中有一个清单表,我需要关联一个规范列表,这是一个代理必须选择的复选框列表。

表格看起来像这样。 - ID - 大小 - 类型 - 位置

现在我该如何存储复选框值? 我是否创建了一个新表“Listings_Specs”并通过“listing_id”将每一行与“Listings”表相关联,或者我应该将它保存在“Listings”表中并向其中添加其他字段。

顺便说一下,我正在使用Laravel 4。

3 个答案:

答案 0 :(得分:0)

如果listing和listing_specs具有1对1的关系,则不需要表listing_specs,可以在Listing表中添加字段。

修改

if you have multiple values in a single field therefore you have to promote this field to a table.
`
Listing:
remove the field for the specs

Listing_specs:
ID | CONTENT | LIST_ID
1  | "fsafs" | 1
2  | "fsafs" | 1
3  | "fsafs" | 1
4  | "fsafs" | 2
5  | "fsafs" | 3`

答案 1 :(得分:0)

如果不了解您的具体需求,很难告诉您最佳的出行方式。通常,最好创建一个新表并将其与" Listings" table via" listing_id"像你提到的那样。这为您提供了更大的灵活性。请记住索引" listing_id"。

另一种方法是将所有复选框直接包含在"列表"表。您可以为每个复选框添加一列。这是最简单但最不灵活的方式。如果复选框的数量随时间而变化,则必须继续修改表格。

或者,您可以为所有复选框添加一个字段。此字段的每个字节代表一个复选框,因此字节数应与复选框的数量相同且顺序相同(或者您必须在某处指定顺序)。这有点复杂,也不是很灵活,因为每次更改复选框时都必须修改此字段。但是,优点是你可以使用一个字段,如果你有很多复选框,它可以很方便。如果您更喜欢可读性,可以使用字符(即1和0)而不是字节。

示例:假设您有5个复选框,"列表"表格如下:

ID | specs
1  | "10110"
2  | "01100"
3  | "11100"
4  | "00010"
5  | "01010"

所以,我会选择你提到的第一个解决方案,但这实际上取决于你的需求。

答案 2 :(得分:-1)

这听起来像他们可能希望你将来添加更多的东西。我不愿为您计划跟踪的每个规范创建列。

相反,最好创建一个名为Specification的新模型,该模型与Listings有许多关系。

然后,检查状态将依赖于SpecificationListing之间通过多对多联接表存在的连接。