uot
@uot (uo yu)

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!

Auth::id();でユーザーIDが取得できない

解決したいこと

Auth::id();でユーザーIDが取得できるようになりたいです。
お知恵をお貸し頂けますと幸いです。

環境

Laravel8

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

投稿機能実装時に、dd()で確認すると下記のようにユーザーIDのみnullになってしまいます。

attributes: array:6 [▼
    "name" => "a"
    "word" => "a"
    "situation" => "a"
    "merit" => "a"
    "detail" => "a"
    "user_id" => null

エラー表示

Illuminate\Database\QueryException
SQLSTATE[HY000]: General error: 1364 Field 'image' doesn't have a default value (SQL: insert into `items` (`name`, `word`, `situation`, `merit`, `detail`, `user_id`, `updated_at`, `created_at`) values (a, a, a, a, a, ?, 2021-09-17 09:15:05, 2021-09-17 09:15:05))

該当するソースコード

ItemController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Item;
use Auth;
use Validator;

class ItemController extends Controller
{

    public function index()
   {
       return view('index');
   }
    public function showCreateForm()
   {
       return view('item/create');
   }

   public function create(Request $request)
   {

       // Postモデルのインスタンスを作成する
       $item = new Item();
       // 名前
       $item->name = $request->name;
       //一言
       $item->word = $request->word;
       //シチュエーション
       $item->situation = $request->situation;
       //メリット
       $item->merit = $request->merit;
       //詳細
       $item->detail = $request->detail;
       //画像
       //$item->image = $request->image;
       //登録ユーザーからidを取得
       $item->user_id = Auth::id();
       // インスタンスの状態をデータベースに書き込む
       $item->save();
       //「投稿する」をクリックしたら投稿情報表示ページへリダイレクト        
       return redirect()->route('item.detail', [
           'id' => $item->id,
       ]);
   }

   /**
    * 詳細ページ
    */
    public function detail(Item $item)
    {
        return view('item/detail', [
            'name' => $item->name,
            'word' => $item->word,
            'user_id' => $item->user_id,
        ]);        
    }

}

create.blade.php
@extends('layouts.app')
@section('content')
<form method="post" action="{{ route('item.create') }}" enctype="multipart/form-data">
 @csrf
 <div class="form">
           <div class="form-title">
           <label for="name">タイトル</label> 
             <input class="" name="name" value="{{ old('name') }}">
           </div>

           <div class="form-title">
           <label for="word"> 一言</label> 
             <input class="" name="word" value="{{ old('word') }}">
           </div>

           <div class="form-title">
           <label for="situation">シチュエーション</label> 
             <input class="" name="situation" value="{{ old('situation') }}">
           </div>

           <div class="form-title">
           <label for="merit">メリット</label> 
             <input class="" name="merit" value="{{ old('merit') }}">
           </div>

           <div class="form-content">
             <label for="detail" class="form-content">詳細</label> 
             <textarea class="" name="detail" cols="50" rows="10">{{ old('detail') }}</textarea>        
           </div>


           <!--<div class="form-title">
           <label for="name">タイトル</label> 
             <input class="" name="name" value="{{ old('name') }}">
           </div>-->



           <div class="form-submit">
             <button type="submit">投稿する</button>
           </div>
       </div>
</form>
@endsection
web.php
<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ItemController;
Route::get('/', [ItemController::class, 'index']);


Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

Route::get('/item', [ItemController::class, 'showCreateForm'])->name('item.create');
Route::post('/item', [ItemController::class, 'create']);
//投稿確認ページ
Route::get('/item/{item}', [ItemController::class, 'detail'])->name('item.detail');

自分で試したこと

様々なユーザーID取得方法を調べて記述しましたが改善せず。。。

0

2Answer

app/Http/Kernel.php$middlewareGroupsを貼り付けられますか?

Auth::user()はデータ入ってますか?

1Like

ルーティングにこのように記述しましたら、解決致しました!

Route::get('/item', [ItemController::class, 'showCreateForm'])->middleware(['auth'])->name('item.create');
0Like

Your answer might help someone💌