okuurt
@okuurt (徹 小山)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

カラム追加後にエラー: SQLSTATE[HY000]: General error: 1364 Field

解決したいこと

ネットの記事を参考にしながらツイッターのような簡単な投稿サイトを作成しています。
ログイン機能実装中で、ユーザーのダミーデータを作っています。
一覧表示から投稿実装までのCRUDの流れを確認しながら進めて、ログイン機能を追加実装してます。

'user_id'カラムを追加しましたが、下記エラーが出ます。
投稿用のダミーデータは、ログイン機能までまで問題なかったです。

発生している問題・エラー

 Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1364 Field 
   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `posts` (`created_at`, `updated_at`, `subject`, `message`, `name`) values (2013-02-13 02:11:00, 1972-03-04 01:34:26, つゆが太陽たいの活字かつかった。, ませんなは乗のらな草や、いっぱいしょう」ジョバンニは[#小書き平仮名ん、ぼんやり白く見えましたちはかすか」ジョバンニは帽子ぼうしろの方を見ているのでした。その鶴つるしは、もうたびはしたような笛ふえを吹ふきなりませんでした。「君たちしっかささぎだねえ」「みんなにうな青じろいろの天上なんだ」カムパネルラにたずねましたりした。「いや森が、なんだねえ」ジョバンニが勢いきないで河かわらっと白服しろはジョバ。, 吉本 京助))

該当するソースコード

laravel-app/app/Post.php

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * 投稿データを所有するユーザを取得
     */
    public function user()
    {
     return $this->belongsTo('App\User');
    }

     // 割り当て許可
     protected $fillable = [
        'name',
        'subject',
        'message', 
        'user_id',
        #'category_id'
    ];

/2021_03_10_101736_create_posts_table.php


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

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->string('is_deleted', 4)->default('0');
            #$table->integer('category_id');
            $table->string('subject');
            $table->text('message');
            $table->string('name');
            $table->unsignedBigInteger('user_id'); #追加
            $table->foreign('user_id')->references('id')->on('users'); #追加
        });
    }

laravel-app/database/seeds/PostsTableSeeder.php

use Illuminate\Database\Seeder;

class PostsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Post::class, 50)
            ->create()
            ->each(function ($post) {
                $comments = factory(App\Comment::class, 2)->make();
                $post->comments()->saveMany($comments);
            }
        );
    }
}
factories/UserFactory.php
$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
});





自分で試したこと

テーブルを書き直したので、migrate:refreshをしました。
つぎにダミーデータを作成したかったので、(PostsTableSeeder,UsersTableSeeder)
PostsTableSeederでエラーになってしまいました。
user.idを追加したので、以前に作った投稿用のダミーデータに問題が起きてしまいました。

$ php artisan migrate:refresh
Dropped all tables successfully.
Migration table created successfully.
$  php artisan db:seed
Seeding: PostsTableSeeder

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `posts` (`created_at`, `updated_at`, `subject`, `message`, `name`) values (2009-03-17 21:24:11, 1995-05-09 11:23:37, よ。ね、あらわたく時々たいまし。, ろなあ。押おして、眼めをそらにわからおまえにラッコの上の槍やりとりは、ガラスの木のような鷺さぎがあったように待まっ黒な野原かわらい牛舎ぎゅうに何があるい輪わを刻きざんに来ました。ジョバンニは何も見つめたくさんとうだ。レートででもあとはねあがりなけぁいけないよ」「うんどんなさんの柱はしましたべてにわたくさんたいようとうになに言いってそうそのとおい、ありまわりました。ジョバンニはまた黒い服ふくをつか。, 宇野 直子))
Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value")
      /var/www/html/laravel-app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  2   PDOStatement::execute()
      /var/www/html/laravel-app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458
end

参考記事

ログイン機能
https://note.com/yuki_biwako/n/n696cb97b64b7
投稿関係
https://nodoame.net/archives/11628#vol9

0

1Answer

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `posts` (`created_at`, `updated_at`, `subject`, `message`, `name`) values (2013-02-13 02:11:00, 1972-03-04 01:34:26, つゆが太陽たいの活字かつかった。, ませんなは乗のらな草や、いっぱいしょう」ジョバンニは[#小書き平仮名ん、ぼんやり白く見えましたちはかすか」ジョバンニは帽子ぼうしろの方を見ているのでした。その鶴つるしは、もうたびはしたような笛ふえを吹ふきなりませんでした。「君たちしっかささぎだねえ」「みんなにうな青じろいろの天上なんだ」カムパネルラにたずねましたりした。「いや森が、なんだねえ」ジョバンニが勢いきないで河かわらっと白服しろはジョバ。, 吉本 京助))

こちらのエラーは,user_id フィールドに値が指定されていないので,default が無いとinsert するときに困る.というエラーです.

こちらでは,マイグレーション用のファイルを書く必要があると書いてあるように読めます.
そちらはどのように設定されていますでしょうか?
user_id の設定が反映できていないように思えます.

0Like

Your answer might help someone💌