laravel用户只在表单中投票一次

时间:2015-11-19 15:08:49

标签: php laravel vote

我对我想要制作的用户投票系统有疑问。

是否可以在用户模型中制作一种角色模型,并且如果用户已投票(这是他们填写的表单),他们无法查看该页面或无法再次提交表单,因为他们已经投了一次

但我不确定这是否可行,你知道是否有办法使这成为可能吗?

更新

用户型号:

protected $table = 'users';

protected $fillable = ['email', 'password', 'voted'];

protected $hidden = ['password', 'remember_token'];

选项模型:

protected $table = 'options';

protected $fillable = ['id, points'];

用户迁移

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('email')->unique();
        $table->string('password');
        $table->boolean('voted')->default(0);
        $table->rememberToken();
        $table->timestamps();
    });
}

选项迁移

public function up()
{
    Schema::create('options', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('option');
        $table->tinyInteger('points');
        $table->timestamps();
    });
}

也许很高兴知道,在我的RoundOneController @ update中我有2个If else语句。 (如果选择框1是来自数据库的id,则更新,否则创建新的。对于选择框2相同) 但是,如果有可能在此结束时更新用户表并且已投票的列将更改为1,则用户不能再投票。

1 个答案:

答案 0 :(得分:0)

如果没有看到代码的设置方式,实际上有几种方法可以实现。

一种方法是在voted模型中添加User列。如果您在迁移中将其设置为boolean,默认值为0,

Schema::table('users', function ($table) {
    $table->boolean('voted')->default(0);
});

然后你可以在用户投票后将其设置为'1'。然后为投票页面设置Middleware,以检查是否存在此值。

中间件文件:

public function handle($request, Closure $next)
{
     if (Auth::user()->voted) {
         return redirect('home');
     }

     return $next($request);
}

确保在kernal.php

中注册中间件
protected $routeMiddleware = [
    ......
    'voted' => \App\Http\Middleware\RedirectIfVoted::class,
];

并将其应用于您的路线:

Route::get('user/vote', ['middleware' => ['voted'], function () {
    //
}]);