2016-03-26 69 views
1

我爲我的項目使用php laravel 5.2。我想用數據庫表設計購物車(表名是購物車)。購物車表具有列名稱session_id以確定每個用戶購物車。如何跟蹤laravel中購物車表的sessionID

的問題是:

  1. 當用戶登錄會話ID將會改變,我失去了購物車的用戶(和的sessionId會改變其他條件)。
  2. 會話過期購物車還存在於數據庫中也不再使用,我怎樣才能算出這個刪除這些類型的購物車?

或任何其他的想法購物車設計與數據庫?

回答

4

真的沒有理由使用會話ID作爲購物車所有者的標識符。背後操縱着購物車的邏輯非常簡單,它等同於以下內容:

  • 當未登錄的用戶(讓我們把它叫做客人)訪問您的網站,會自動創建一個會話Laravel。
  • 如果該訪客用戶將某物添加到購物車,則添加到購物車的商品/商品將存儲在該會話中。沒有理由爲客人在數據庫中存儲購物車信息,因爲該會話是暫時的,並且只在客人在您的網站上處於活動狀態時才需要。一旦該訪客用戶離開該網站(即瀏覽器關閉或會話過期),如果他再次返回(因此使用的術語是訪客),您無法(真實地)識別同一用戶。如果您希望允許客人下訂單,則可以使用會話購物車信息下訂單(客人仍然不需要數據庫)。
  • 它纔有意義在數據庫中,當你處理一個商店購物車信息(您cart表)登記已登錄用戶。在這種情況下,由於用戶只能有一個購物車,所以將購物車物品鏈接到用戶的標識符爲user_id
+---------+------------+ 
| user_id | product_id | 
+---------+------------+ 
  • 存儲user_idproduct_id真的是你基本上需要處理車項目,因爲它只是引用了用戶的列表:那麼作爲cart表可以很簡單詳細信息存儲在users表中,以及詳細信息存儲在products表中的產品。

當然,如果訪客用戶向購物車中添加了一些物品(此時存儲在會話中),如果該訪客決定在會話購物車中放入東西時登錄,則可能有意義在登錄過程成功後,向數據庫添加(更精確地同步)這些項目。

因此,如果用戶上次登錄時已在數據庫購物車中購買了某些產品,則當前會話購物車中的新產品將添加到舊產品中。儘管如果您想要同步這些物品,或者只是完全覆蓋這些物品以僅保留新購物車物品,那麼這是您的選擇。


因此,按照上述準則消除了從數據庫中刪除車的物品,因爲那裏將只在數據庫車中的項目鏈接到需要呆在那裏是下一個可用的註冊用戶的需要,這些用戶登錄

+0

當用戶將產品添加到購物車時,他們應該能夠關閉瀏覽器會話並在幾天後重新訪問網站,並且仍然可以看到購物籃中的物品。使用cookies取而代之是有意義的,但也可以將購物車堅持到數據庫,因爲它提供了有價值的統計數據,例如經常選擇哪些產品,因此受歡迎。 – Alex