使用Laravel 5构建投票系统

时间:2015-08-10 14:56:12

标签: php database laravel-5

我正在尝试为我的网页构建投票系统(Laravel 5)。现在,任何用户都可以多次投票,我想解决它。

这是我在php中的代码:

public function addVote()
{
    $bikepoint = $this->bikepoint->find($id);
    $userid = \Sentry::getUser()->id;
    $votesid = \DB::table('bikepoints')->select('votesuid')->where('votesuid', 'LIKE' , $userid)->get();
    if (...) {
        $bikepoint->votes = $bikepoint->votes + 1;
        $bikepoint->votesuid = $bikepoint->votesuid . $userid . '; ';
        echo 'Success!';
    }
    else {
        echo 'Fail!';
    }
    $bikepoint->save();
}

我的数据库表:

id  title   votes  votesuid
1   point1  2      93; 22;
2   point2  3      92; 28; 47;
3   point3  45     ...
4   point4  32     ...
5   point5  12     ...

因此,当用户点击“添加投票”按钮时,函数会将其ID添加到votesuid字段,并对votes字段进行一次投票。

我想检查用户是否已经通过检查他的ID是否放在votesuid字段中进行了投票。如果是这样,用户就不能再投票了。

例如,ID为922847的用户不能再投票。

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中所建议的那样,是的,您需要更改您的系统,以便每次投票都有自己在桌面上的记录。

因此,为它创建一个Votes表和一个Laravel模型类,并为您的Users模型类提供与投票的hasMany()关系。

实际上没有太多工作,是吗?

但是现在,你的问题的解决方案变得非常简单 - 即:

$votes = Sentry::getUser()->votes;

就目前情况而言,您需要执行更难编写的子字符串LIKE查询,并且当您的数据库开始变大时也会给您带来重大性能问题,所以是的,您肯定需要现在重构它。