単一のテーブルを使用して追跡votes
でき、構造は次のようになります
表 :投票
id | user_id | debate_id | vote
ここで、vote
フィールドはtinyInt
defaultである可能性がありますnull
。
また、vote
フィールドでは、投票の種類に応じて 2 つの異なる値を保持するだけです。たとえば、ユーザーが賛成票を投じた場合1
はvote
フィールドに の値を挿入し、反対票を投じた場合は の値を挿入します0
。したがって、テーブルは次のようになります
id | user_id | debate_id| vote
1 | 10 | 4 | 1 <-- up
2 | 11 | 4 | 0 <-- down
3 | 12 | 4 | 1 <-- up
この場合、 と を持つ 2 人のユーザーが投稿に賛成票id = 10
をid = 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
。