5

私は自分のウェブサイトに賛成票と反対票を投じるシステムを作成したいと考えています。このシステムでは、一意のユーザーが 1 つの投稿に対して賛成票と反対票を投じることができ、次回は反対のユーザーのみがデータベースから降りることができ、その後は再び賛成票または反対票を投じることができます。

この場合、私は持っています:

ユーザーテーブル:

id 
name

討論表 :

id
post

賛成票テーブル:

id
user_id
debate_id

同様に反対票を投じるテーブル:

id
user_id
debate_id

それは、賛成票と反対票の概念を管理および追跡するための良い方法ですか?

4

2 に答える 2

13

単一のテーブルを使用して追跡votesでき、構造は次のようになります

表 :投票

id | user_id | debate_id | vote

ここで、voteフィールドはtinyIntdefaultである可能性がありますnull

また、voteフィールドでは、投票の種類に応じて 2 つの異なる値を保持するだけです。たとえば、ユーザーが賛成票を投じた場合1voteフィールドに の値を挿入し、反対票を投じた場合は の値を挿入します0。したがって、テーブルは次のようになります

id | user_id | debate_id| vote
1  | 10      | 4        | 1 <-- up
2  | 11      | 4        | 0 <-- down
3  | 12      | 4        | 1 <-- up

この場合、 と を持つ 2 人のユーザーが投稿に賛成票id = 10id = 12投じ、その投稿に反対票を投じたdebate_id = 4別のユーザーがuser_id = 11同じ投稿に投票しました。この場合、フィールドの値を数えることで、投稿が得た賛成票または反対票の数を知ることができますvote。たとえば、次のdebate_id = 4ようなものを使用して賛成票を数えることができます。

$count = Debate::where('debate_id', '=', 4)->where('vote', '=', 1)->count();

また、何かQuery Scopeを使用することもできますが、これは単なるアイデアであり、このスコープ内のすべてをカバーする回答を作成することはできません。いくつかの基本的なアイデアを使い始める必要があります。特定の時点で行き詰まった場合は、コードについて特定の質問をすることができます。

votesまた、テーブルに特定のユーザー ID が見つかった場合debate_id、このユーザーはこの投稿に投票したので、投票の種類を確認するには、voteフィールドを確認してください1 or 0

于 2013-11-05T11:54:26.013 に答える
3

投票を含むテーブルを 1 つだけにしたいのですが、これはis_downvote int(1).

あなたはあまり試していないようですが、これは常に否定的です。このシナリオでは、Laravel Eloquent のドキュメントがこれを理解するのに十分なはずです。

これをコメントとして書きたいのですが、今はかなり長いです。

于 2013-11-05T11:28:15.653 に答える