0
1

More than 3 years have passed since last update.

投稿にユーザーIDを紐づけたい

Last updated at Posted at 2021-08-12

投稿時に下記のエラーが出る

laravel sql エラー: SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value

user_idは初期値をもっていないとあるが、つまりはuser_idが入力できていない(空っぽ)ということ。

スクリーンショット 2021-08-12 15.43.27.png

エラーが出たときのコントローラーの記述。

BlogController.php
    public function store(Request $request){
        // ブログのデータ(BlogPostRequest)を$requestで受け取る
        $inputs = $request->all();

        DB::beginTransaction();
        try{
            // ブログを登録
            Blog::create($inputs);
            DB::commit();
        } catch(\Thorwable $e){
            DB::rollback();
            abort(500);
        }


        \Session::flash('err_msg2','ブログを登録しました');
        return redirect(route('blogs'));
    }

モデルのfillableにuser_idを追記することも忘れてない。

Blog.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    use HasFactory;

    // テーブル名を明示
    protected $table = 'blogs';

    //可変項目(Modelを継承したBlogクラスを扱えば、以下のカラムを操作できる)
    protected $fillable = 
    [
        'title',
        'content',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

}

下記のように改めることで解決した。

BlogController.php
    public function store(BlogPostRequest $request){
        // ブログのデータ(BlogPostRequest)を$requestで受け取る
        $user = Auth::user(); //追記
        $id = Auth::id(); //追記
        $inputs = ['user_id'=>$user->id,'title'=>$request->title, 'content'=>$request->content]; //変更

        DB::beginTransaction();
        try{
            // ブログを登録
            Blog::create($inputs);
            DB::commit();
        } catch(\Thorwable $e){
            DB::rollback();
            abort(500);
        }


        \Session::flash('err_msg2','ブログを登録しました');
        return redirect(route('blogs'));
    }

Auth::userでログイン済みのユーザー情報を取得。
$inputsの中身を配列にして、user_idも入力内容に含めた。
use文でAuthファサードやUserモデルを使えるようにしておくことも忘れてはいけない。

BlogController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\User; //追記
use Illuminate\Support\Facades\Auth; //追記
use App\Http\Requests\BlogPostRequest; //フォームリクエストでバリデーションを行う場合に追記
use Illuminate\Support\Facades\DB;


0
1
1

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
0
1