2014-04-03 57 views
0

我有一個簡單的任務來實現,我不知道什麼是最好的方式去實現它。將複選框值存儲到數據庫的最佳方法是什麼?

我在我的數據庫中有一個Listings列表,我需要關聯規範列表,這是代理必須選擇的複選框列表。

表看起來像這樣。 - ID - 大小 - 型 - 位置

現在我該怎樣去存儲的複選框值? 我是否創建一個新表「Listings_Specs」,並通過「listing_id」將每行與「Listings」表相關聯,還是應將其保存在「Listings」表中並向其中添加其他字段。

我正在使用Laravel 4。

回答

-1

這完全聽起來他們可能要你增加更多的在未來的那種東西。我不願意爲您計劃跟蹤的每個規範創建列。

取而代之的是,創建一個名爲Specification的新模型將會是一個好主意,這個模型與Listings有許多關係。

選中狀態將取決於SpecificationListing之間經由多對多連接表存在的連接。

+0

但是之後我需要在我的ListingsController.php上同時插入2行到2個不同的表格 Laravel是否允許我做這樣的事情?就像這樣: $ listing = new Listing; $ listing-> type = Input :: get('type'); $ listing_specs = new規格; $ listing_specs = Input :: get('swimming_pool'); 會工作嗎? – Halnex

+0

請記住,$ listing_specs將提交數據到不同的表。這是如何運作的? – Halnex

+0

您創建的第一條記錄在您的情況下將是'Listing',您的表單只需要顯示'Specification'中的可用選項。一旦創建了'Listing'記錄,您只需在關係上使用'sync()'方法爲每個選中的listing.id'創建連接表記錄:https://github.com/laravel/framework/ BLOB /主/ src目錄/照亮/數據庫/雄辯/關係/ BelongsToMany.php#L565 –

0

如果列表和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` 
+0

但是,如何將多個值存儲到數據庫中的相同字段? – Halnex

+0

再次檢查帖子。 – CMPS

+0

@Halnex你可以用字節存儲它們(或者你可以使用字符,如果你更喜歡可讀性)。查看我的答案以獲取更多詳情。 –

0

很難告訴你最好的方式去不知道你的需求的具體細節。一般來說,最好是創建一個新表格,並像上面提到的那樣通過「listing_id」將其與「Listings」表關聯起來。這給你更多的靈活性。記得索引「listing_id」。

另一種方法是將所有複選框直接包含在「列表」表中。您可以爲每個複選框添加一列。這是最簡單但最不靈活的方式。如果您的複選框的數量隨着時間而改變,您必須不斷修改表格。

或者,您可以爲所有複選框添加單個字段。該字段的每個字節表示一個複選框,因此字節數應與複選框的數量相同,並且順序相同(或者您必須在某處指定順序)。這有點複雜,也不是很靈活,因爲每次更改複選框時都必須修改此字段。然而,優點是如果你有很多複選框,你可以使用一個方便的字段。如果您更喜歡可讀性,則可以使用字符(即1和0)而不是字節。

例子:假設你有5個複選框,在「清單」表將是這樣的:

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

所以,我會跟你提到的第一個解決方案去,但它實際上取決於你的需要。

相關問題