Laravel: поле "Remember_me" не имеет значения по умолчанию - PullRequest
0 голосов
/ 13 мая 2018

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

Но у меня возникла проблема при отправке данных в базу данных.Это говорит 'Field 'remember_me' doesn't have a default value'.

Я не могу найти, почему он ожидает значение по умолчанию, так как я отправляю данные Remember_me, то есть зарегистрированный => 1 и непроверенный => 0!Я использую Javascript для этого!

RegisterController.php

<?php

namespace App\Http\Controllers\Authentication;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;

class RegisterController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index() {
        return view('auth.register');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create() {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        $user = User::create($request->all());

        return redirect('/');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id) {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id) {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id) {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id) {
        //
    }
}

register.blade.php

@extends('master')

@section('title')
  Register - CMS APP
@endsection

@section('styles')
  <link rel="stylesheet" href="{{ asset('css/auth.css') }}">
@endsection

@section('register')
  <form class="form-signin" method="post" accept-charset="utf8" action="/register">
    @csrf
    <img class="mb-4" src="http://logo.kenh.net/logo/bootstrap-4.svg.png" alt="" width="72" height="72">
    <h1 class="h3 mb-3 font-weight-normal">Please Register</h1>
    <label for="inputFirstName" class="sr-only">First Name</label>
    <input name="fname" type="string" id="inputFirstName" class="form-control" placeholder="First Name" required autofocus>
    <label for="inputLastName" class="sr-only">Last Name</label>
    <input name="lname" type="string" id="inputLastName" class="form-control" placeholder="Last Name" required autofocus>
    <label for="inputEmail" class="sr-only">Email address</label>
    <input name="email" type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
    <label for="inputPassword" class="sr-only">Password</label>
    <input name="password" type="password" id="inputPassword" class="form-control" placeholder="Password" required>
    <div class="checkbox mb-3">
      <label>
        <input name="remember_me" id="rememMe" type="checkbox" value="0"> Remember me
      </label>
    </div>
    <button class="btn btn-lg btn-success btn-block" type="submit">Register</button>
    <br>
    <a href="/login" class="btn btn-primary">Login</a>
  </form>
@endsection

<script>
  window.onload = () => {
    let rememberMe = document.getElementById('rememMe');

    rememberMe.onclick = () => {
      if(rememberMe.checked) {
        rememberMe.value = 1;
      }else {
        rememberMe.value = 0;
      }
    }
  };
</script>

Маршруты

Route::resource('register', 'Authentication\RegisterController')->only([
    'index', 'store'
]);

Миграция:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id')->default(2);
            $table->integer('is_active')->default(1);
            $table->integer('remember_me');
            $table->string('fname');
            $table->string('lname');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

Пожалуйста, помогите мне исправить это!

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Когда флажок установлен в форме, он дает значение on, а не 1. Поле в вашей базе данных хранит значение integer, вам действительно следует использовать boolean. Таким образом, Eloquent будет принимать и сохранять значения из on, off и вводить их как 1 или 0.

Для предотвращения этой ошибки в будущем вам следует добавить значение по умолчанию в ваше поле и сохранить его как логическое значение.

Создать новую миграцию.

php artisan make:migration add_default_remember_me_to_users

Тогда в миграции:

public function up()
{
    Schema::table('users', function($table) {
        // Change field to boolean and define a default value
        $table->boolean('remember_me')->default(0)->change();
    });
}

public function down()
{
    Schema::table('users', function($table) {
        $table->integer('remember_me')->change();
    });

}

Затем запустите миграцию:

php artisan migrate

и тебе надо идти!

0 голосов
/ 13 мая 2018

я думаю, что значение флажка должно быть равно 1, потому что при отправке оно будет равно 0, даже если оно отмечено

<input name="remember_me" id="rememMe" type="checkbox" value="1">

и чтобы ошибка больше не повторялась, вы можете сделать это в вашем контроллере

public function store(Request $request) {
    $request['remember_me'] = $request['remember_me'] ? 1 : 0;
    $user = User::create($request->all());

    return redirect('/');
}

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...