Yêu cầu thg 6 11, 2018 3:42 CH 999 3 1
  • 999 3 1
+2

Góp ý ý tưởng về chức năng LIKE bài viết và comment trong Laravel.

Chia sẻ
  • 999 3 1

Một câu hỏi mà em rất muốn nhận được sự góp ý của các bạn, anh, chị trong Group. Đây là sự góp ý, vì e cũng có ý tưởng, nhưng e sợ ý tưởng của e không được hay và tối ưu nên e muốn hỏi để tối ưu ý tưởng của mình ạ.

Ý là em chuẩn bị làm chức năng like cho commentbài viết, và vấn đề gặp phải ở đây là: “Làm thế nào để nhận dạng được người nào đã LIKE bài viết hoặc đã LIKE comment, để có thể disable nút LIKE đi ở phía Client ấy ạ..

Ý tưởng của e có thể hơi củ chuối 1 chút, nên nếu anh chị bạn nào có ý tưởng hay hơn có thể chia sẻ cho e học hỏi ạ..

My idea: Vì một bài viết, comment có mỗi quan hệ N- N với bảng Users nên e sẽ tạo một bảng phụ có tên là comment_user, posts_user và query như bình thường ạ, nếu xét có user đang đăng nhập trùng với 1 user_id ở 2 bảng trên thì chứng tỏ có LIKE rồi..

Đó là ý tưởng củ chuối của em, và giờ kg biết có ý tưởng nào hay hơn không ạ? Như là lưu thông tin người LIKE ở server chẳng hạn ạ, lưu vào 1 array rồi duyệt.. Nhưng e chưa biết cách này…

E xin cám ơn ạ

1 CÂU TRẢ LỜI


Đã trả lời thg 6 12, 2018 12:43 SA
Đã được chấp nhận
+4

My idea: Vì một bài viết, comment có mỗi quan hệ N- N với bảng Users nên e sẽ tạo một bảng phụ có tên là comment_user, posts_user và query như bình thường ạ, nếu xét có user đang đăng nhập trùng với 1 user_id ở 2 bảng trên thì chứng tỏ có LIKE rồi..

Anh không hiểu rõ chỗ này của em lắm. 🤔 Bài viết và comment là có quan hệ 1 - n với user (1 bài viết, hay 1 comment chỉ thuộc về 1 user, 1 user có nhiều bài viết hay comment), chứ sao lại quan hệ n - n được 😂

Để thực hiện chức năng LIKE, ta cần một bảng trung gian giữa userpost, cũng như usercomment. Em nên dùng Polymorphic Relations trong trường hợp này, khi đó chỉ cần có một bảng trung gian, gọi là likes chẳng hạn.

Bảng likes sẽ có cấu trúc như sau:

likes
    id - integer
    user_id - integer
    likeable_id - integer
    likeable_type - string

mỗi khi users like một comment, hay post, thì em insert một bản ghi vào trong bảng likes ở trên, như vậy sẽ lưu được thông tin về việc ai đã từng like những cái gì. Ví dụ như em có 2 bản ghi:

1, 2, 3, "COMMENT" // => user 2, like comment có id là 3
2, 3, 4, "POST" // => user 3, like post có id là 4

Laravel có support sẵn khai báo và query Polymorphic Relations rồi nên implement cũng rất dễ em ạ 😄

Chia sẻ
Avatar Jimmy Nguyen @minhtuancnttk39
thg 6 12, 2018 8:09 CH

E hiểu ý a ạ... nhưng e chưa tìm hiểu được Polymorphic Relations đó ạ? A có thể nói cụ thể hơn xíu được không ạ?

Thêm 1 ý là e chưa biết cách check xem thử 1 user đã like comment, hoặc post hay chưa ạ?...

Avatar Tran Duc Thang @thangtd90
thg 6 13, 2018 12:20 SA

@minhtuancnttk39 Về Polymorphic Relations, hay dịch ra là quan hệ đa hình, em có thể tham khảo một vài bài viết dưới đây trên Viblo, trong đó có những ví dụ cụ thể sẽ giúp em hiểu rõ hơn 😄

Còn làm thế nào để check xem thử 1 user đã like comment, hoặc post hay chưa?, thì rất đơn giản, em check xem có record trong bảng likes hay chưa.

Ví dụ check xem user có id là 3 đã like comment có id là 4hay chưa thì em chỉ cần query kiểu như sau

select * from likes where user_id = 3 and likeable_id = 4 and likeable_type = 'App\Model\Comment' limit 1;

nếu có record thì chứng tỏ like rồi, còn chưa có thì tức là chưa like 😄 Bởi khi người dùng like, em sẽ tạo thêm 1 record với nội dung kiểu như ở trên, còn ghi người dùng unlike, em sẽ xoá record đấy đi 😄

Avatar Jimmy Nguyen @minhtuancnttk39
thg 6 13, 2018 3:50 SA

Yeppp, e làm được rồi, lúc ngủ e suy nghĩ xong cái dậy code..

Đã thành công rồi ạ...

Đoạn đường e làm cái website này, luôn có anh và các anh trên Viblo cùng đồng hành...

Avatar Tran Duc Thang @thangtd90
thg 6 13, 2018 3:52 SA

@minhtuancnttk39 👍 Cố gắng lên em nhé 😉

Có gì cứ lên Viblo đặt câu hỏi, mọi người sẽ giúp đỡ mà 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí