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


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

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

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

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

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;