1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLSTATE[HY000]: General error: 1364 Field '〇〇' doesn't have a default value の解決方法

Last updated at Posted at 2023-03-18

簡単な記事投稿サイトを作成しているとタイトルの通り以下のエラーに遭いました。
SQLSTATE[HY000]: General error: 1364 Field '〇〇' doesn't have a default value

error.png

すごくシンプルなミスだったのですが、原因はカラム登録のための実装が抜けていたことです。

原因がシンプルなので解決策はカラム登録の実装をすれば良いだけです。
それでは解説していきます。

エラーの原因と解決策

エラーの原因はシンプルに私が勘違いしていたことにあります。

usersテーブルとarticlesテーブルを紐づけるuser_idカラムを追加したのですが、「外部キーは自動で作成される」と思っていました。

ネットで拾った外部キー作成に関する記事を見ながら実装し、特にモデルやコントローラーへコードを追記する説明がなかったので、「自動で作成されるのかな?」と思い込んでしまいました。

解決策は以下のようにモデルとコントローラーに追記するだけで終了です。

ArticleController.php
public function register(ArticleRequest $request)
    {
        $user = Auth::user();

        $article = Article::create([
            'title' => $request->title,
            'body' => $request->body,
          + 'user_id' => $user->id,  //追加
        ]);
        return redirect()->route('articles.index')
            ->with('staus', '投稿が完了しました。');
    }
Article.php
//略

class Article extends Model
{
    use HasFactory, SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'title',
        'body',
      + 'user_id', //追加
    ];

    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }
}

これだけで今回の問題は解決です!

まとめ

今回はエラーメッセージが明確だったためすぐに解決することができました。

そもそも「外部キーは自動で作成される」という勘違いをしたことが全ての始まりです。(なんでそんな風に思ったのだろう(笑))

似たようなエラーが出た人はカラムの実装を見直してみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?