投稿にユーザー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;
Author And Source
この問題について(投稿にユーザーIDを紐づけたい), 我々は、より多くの情報をここで見つけました https://qiita.com/apprentice123/items/70bf8bee8bd31347c5f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .