Пользователь laravel голосует только один раз в форме

У меня есть вопрос о системе голосования пользователей, которую я хочу сделать.

Можно ли сделать своего рода образец для подражания в модели пользователей, и если пользователь проголосовал (это форма, которую он заполняет), он не сможет просмотреть эту страницу или не сможет отправить форму снова, потому что он уже один раз проголосовал.

Но я не уверен, если это возможно, вы знаете, есть ли способ сделать это возможным?

Обновить

Модель пользователей:

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 @ у меня есть 2 оператора If else.
(Если поле выбора 1 является идентификатором из базы данных, тогда обновите, иначе создайте новое. То же самое для поля выбора 2)
Но если есть вероятность того, что после этого таблица пользователей будет обновлена, а столбец с голосами изменится на 1, тогда пользователь не сможет больше голосовать.

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);
}

Обязательно зарегистрируйте Middleware в kernal.php

protected $routeMiddleware = [
......
'voted' => \App\Http\Middleware\RedirectIfVoted::class,
];

и примените его к вашему маршруту (ам):

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]