Asked Jul 8th, 8:13 AM 95 1 2
  • 95 1 2
0

Làm sao để lưu lựa chọn của sản phẩm vào databse ?

Share
  • 95 1 2

Hi mọi người! Em đang làm một đồ án về đặt hàng thức uống.

Sản phẩm(Product) thì có thể nhiều các lựa chọn khác nhau (Option) như size, đá, đường , và các loại Topping khác nhau. Option thì có thể có nhiều sản phẩm cùng dùng chung nhưng giá của chúng có thể khác. Còn trong bảng Topping thì mức giá được dùng chung cho tất cả sản phẩm. Khi chọn sản phẩm thì khách hàng có thể chọn các option cũng như topping ở trên và lưu vào giỏ hàng (Cart)

*Ví dụ: *

  • Sản phẩm A:
    • Option: Size (S,M) -> S (+0), L (+6000)
    • Topping : trân châu trắng(+5000), trân châu đen(+3000)
  • Sản phẩm B:
    • Option Size (S,M,L) , Đá(Không đá, đá vừa, nhiều đá) -> S(+0) M +(5000), L (+10000), Đá không tính tiền thêm
    • Topping: Whipping Cream(+5000), Chocolate(+5000), Trân châu trắng(+5000), trân châu đen(+3000)

Như vậy, em có bảng Product, Option,Topping, ProductOption, ProductTopping:

  • Product(name, price, ...)
  • Option(name,...)
  • Topping(name,price)
  • ProductOption(product_id, option_id, price,isDefault, ..) - default = true thì price là 0, price là giá cộng thêm hoặc trừ bớt so với giá gốc
  • ProductTopping(product_id, topping_id,..)

Em có làm và show rât Oke nhưng khi khách bỏ vào Giỏ hàng thì làm sao có thể lưu được tất cả các thuộc tính ở trên vào giỏ à ?

Em có cần phải tạo thêm bảng CartOption và CartTopping không ạ ?

Em còn một thắc mắc nữa là mình sao khi lưu Cart được rồi thì có cần phải sao chép tất cả các thuộc tính của Product vào Order không ạ ?

Em cảm ơn mọi người quan tâm câu hỏi của em ✋

Jul 9th, 2:36 AM

2 ANSWERS


Answered Jul 9th, 4:03 AM
Accepted
0

Bạn tạo thêm 1 trường rồi lưu dạng json đó bạn thì sẽ giải quyết được 2 câu hỏi của bạn ở trên: [ "productA": { "option": ..., "topping": ... }, "productB": { "option": ..., "topping": ... }, ]

không cần tạo thêm bảng CartOption và CartTopping không cần phải sao chép tất cả các thuộc tính của Product vào Order vì cái đoạn json kia bạn có thể xử lí được hết ngoài ra bạn có thể tham khảo hoặc tự nghĩ thêm cách khác

Share
Jul 9th, 6:00 AM

Cảm ơn a . Vậy làm sao để có thể lưu lại đc chi tiết đơn hàng đó (bao gồm cả số option và topping đã lựa chọn) khi khách hàng tìm lại đơn hàng cũ để xem ạ

0
| Reply
Share
Jul 12th, 1:47 AM

@sucanabo lưu cả vào json đó bạn [ "productA": { "option": {"size": L, "soluong": 5}, "topping":["chan chau trang", "chantrau den"] }, "productB": { "option": ..., "topping": ... }, ]

0
| Reply
Share
Jul 12th, 10:28 AM

@hoangkim1982 phải ý của anh là lưu cả json vào một column trong cart luôn ạ ❤️.

0
| Reply
Share
Answered Jul 8th, 8:37 AM
0

Sao bạn không lưu các lựa chọn vào cookie ở trình duyệt cho tiện, mỗi khi khách thay đổi giỏ hàng lại phải cập nhật csdl thì hơi bất tiện.

Share
Jul 8th, 8:50 AM

Mình viết app mobile á bạn.. Tại vì mình muốn khách hàng có thể coi lại lịch sử đơn hàng gồm những gì và chi tiết của mỗi món hàng trong đơn. Nên mình tự hỏi có lưu vào db hay không, và làm cách nào để lấy dữ liệu đó ra để xem

0
| Reply
Share
Avatar Tran Minh Nhat @tranminhnhat
Jul 8th, 9:19 AM

@sucanabo À, nếu app mobile thì bạn có thể lưu vào local storage: sqlite, shared preferences hoặc file đều được mà. Đằng nào dữ liệu của app bạn vẫn lưu trên server rồi đúng không. Tiện nhất theo mình là lưu ra file hoặc shared preferences, đỡ phải mất công tạo bảng truy vấn.

+1
| Reply
Share
Jul 9th, 5:58 AM

@tranminhnhat Mình hiểu vấn đề bạn nói rồi .. nhưng làm sao khi khách hàng xem lại lịch sử đơn hàng thì có thể thấy lại chi tiết đơn đó như nào b?

0
| Reply
Share
Jul 9th, 7:27 AM

Cũng tùy vào nhu cầu mà, nếu lưu vào DB, tạo giỏ hàng trên web thì dưới mobile cũng thấy giỏ hàng được cập nhật giống vậy. Đó sẽ mang lại trải nghiệm tốt cho người dùng.

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.