質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value phpmyadminに値が保存されない

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 468

score 22

DBに値が入らない

laravel初心者です。
laravelにてmake:authで認証を作りました。そこに新たにカラムを追加しました。
しかし、登録をしても下記のようにエラーが発生します。
デフォルト値をどのようにしたら良いのか分かりません。

カラムにデフォルト値がありません

Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'name_kana' doesn't have a default value (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (テスト太朗, zzz@gmail.com, $2y$10$.gxY.81pkBcRoWNszN4ZaeroiDjdCOBPcWudBjwFG3fmRP.j8uMK., 2021-01-20 18:33:08, 2021-01-20 18:33:08))

下記コードとスクショを掲載します

RegisterController.php
protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'name_kana' => ['required', 'string', 'max:255'],
            'gender' => ['required','boolean'],
            'age' => ['required','digits:2'],
            'birthday' => ['required','integer'],
            'postal_code' => ['required','digits:7'],
            'address' => ['required','max:800'],
            'phone' => ['required','digits_between:10,11'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
2021_01_20_115743_add_admin_to_users_table.php
<?php

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

class AddAdminToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->string('name_kana')->after('name'); //氏名 カナ
            $table->boolean('gender')->after('name_kana'); // 性別
            $table->tinyInteger('age')->after('gender');//年齢
            $table->integer('birthday')->after('age');//誕生日
            $table->integer('postal_code')->after('birthday');//郵便番号
            $table->string('address')->after('postal_code');//住所
            $table->integer('phone')->after('address');//電話番号
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }
}
2020_12_13_162253_create_admins_table.php
<?php

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

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

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

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('ご登録内容') }}</div>
                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('氏名') }}</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="name_kana" class="col-md-4 col-form-label text-md-right">{{ __('氏名(カナ)') }}</label>

                            <div class="col-md-6">
                                <input id="name_kana" type="text" class="form-control @error('name_kana') is-invalid @enderror" name="name_kana" value="{{ old('name_kana') }}" required autocomplete="name_kana" autofocus>

                                @error('name_kana')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="gender" class="col-md-4 col-form-label text-md-right">{{ __('性別') }}</label>

                            <div class="col-md-6">

                                <input type="radio" name="gender" value="0">男性
                                <input type="radio" name="gender" value="1">女性
                            </div>
                        </div>
//以下省略

phpmyadminの画像です

phpmyadminの画像です

usersテーブルの中身です

usersテーブルの中身です

phpmyadminを操作

デフォルト値をなしにしたら登録はできましたが値が全て0で保存されていました。
カラムの値、バリデーションが間違いがあるのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kai0310

    2021/01/20 23:50

    ドキュメントは読んでいますか?
    該当するModelとControllerの提示をお願いします

    キャンセル

  • phper.k

    2021/01/21 10:35

    コントローラーとモデルのソースコード

    キャンセル

回答 2

check解決した方法

0

お忙しい中ご回答ありがとうございます。
すいません、自己解決しました。
原因は単なるcreateメソッドに$dataを渡していなかったからです。  
これではフォームに値を入力してもDBには0で登録されることが分かりました。

//省略

protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'name_kana' =>$data['name_kana'], //追加
'gender' =>$data['gender'], //追加
'age' => $data['age'], //追加
'birthday' => $data['birthday'], //追加
'postal_code' => $data['postal_code'], //追加
'address' => $data['address'], //追加
'phone' => $data['phone'], //追加
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
//省略

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ぱっと見ただけでも、insert のvalues句の文字列はシングルクォーティングしないといけない。

insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) 
values (テスト太朗, zzz@gmail.com, $2y$10$.gxY.81pkBcRoWNszN4ZaeroiDjdCOBPcWudBjwFG3fmRP.j8uMK., 2021-01-20 18:33:08, 2021-01-20 18:33:08))
   ↓
insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) 
values ('テスト太朗', 'zzz@gmail.com', '$2y$10$.gxY.81pkBcRoWNszN4ZaeroiDjdCOBPcWudBjwFG3fmRP.j8uMK.', '2021-01-20 18:33:08', '2021-01-20 18:33:08'))

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/01/21 10:30

    insert のvaluesを調べてみました。
    シングルコーテーションで囲む必要がありますがどこのファイルを操作すれば宜しいのでしょうか?
    マイグレーションファイル、RegisterController.phpのシングルコーテーションを確認しましたが該当箇所が見つかりません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る