У меня есть вопрос о системе голосования пользователей, которую я хочу сделать.
Можно ли сделать своего рода образец для подражания в модели пользователей, и если пользователь проголосовал (это форма, которую он заполняет), он не сможет просмотреть эту страницу или не сможет отправить форму снова, потому что он уже один раз проголосовал.
Но я не уверен, если это возможно, вы знаете, есть ли способ сделать это возможным?
Обновить
Модель пользователей:
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, тогда пользователь не сможет больше голосовать.
Не смотря на то, как настроен ваш код, на самом деле есть несколько способов сделать это.
Одним из способов было бы иметь 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 () {
//
}]);
Других решений пока нет …