実現したいこと
・セレクトボックスで選んだカテゴリの情報を新規作成のデータとして送りたい
前提
Laravel初心者です。
現在Todoアプリを作成しています。
新規作成の際に必要な情報は3つあり、プラン名、予定日、カテゴリで、このうちのカテゴリをセレクトボックスで選択し、データを送りたいのですがエラーになってしまいます。
発生している問題・エラーメッセージ
Method Illuminate\Http\Request::category does not exist.
該当のソースコード
Todo.php(モデル)
php
1<?php 2namespace App\Models; 3 4use Illuminate\Database\Eloquent\Factories\HasFactory; 5use Illuminate\Database\Eloquent\Model; 6 7class Todo extends Model 8{ 9 use HasFactory; 10 11 // リレーション 12 public function user() 13 { 14 return $this->belongsTo(User::class,'user_id'); 15 } 16 17 public function category() 18 { 19 return $this->belongsTo(Category::class,'category_id'); 20 } 21 22} 23
Category.php(モデル)
php
1<?php 2namespace App\Models; 3 4use Illuminate\Database\Eloquent\Factories\HasFactory; 5use Illuminate\Database\Eloquent\Model; 6 7class Category extends Model 8{ 9 use HasFactory; 10 11 // リレーション 12 public function todos() 13 { 14 return $this->hasMany(Todo::class,'category_id','id'); 15 } 16} 17
コントローラ TodoController.php(一部抜粋)
php
1 2namespace App\Http\Controllers; 3 4use Illuminate\Http\Request; 5 6use App\Models\Todo; 7use App\Models\Category; 8use App\Models\User; 9 10class TodoController extends Controller 11{ 12 public function create() 13 // 新規作成画面 14 { 15 $categories = Category::all(); 16 return view('todos.create', compact('categories')); 17 } 18 19 public function store(Request $request) 20 // 新規作成 21 { 22 $todo = new Todo; 23 $category = new Category(); 24 25 //データを割り当てる 26 $todo->title = $request->input('todo_title'); 27 $todo->due_date = $request->input('due_date'); 28 $todo->user_id = $request->user()->id; 29 $todo->category_id = $request->category()>id; 30 31 //保存 32 $todo->save(); 33 //リダイレクト 34 return redirect('/todos'); 35 } 36}
View(create.blade.php)
php
1<h2>まずはプランや目標を決めましょう!</h2> 2 3<form action="/todos" method="post"> 4 @csrf 5 6 <div class="plan_create"> 7 <label>プラン名</label><input placeholder="プランを入力してください" type="text" name="todo_title" /></br> 8 9 <label for="due_date">期限</label> 10 <input type="text" name="due_date" id="due_date" value="{{ old('due_date') }}" /></br> 11 12 <!-- カテゴリ選択 --> 13 <div class="form-group"> 14 <label for="category_id">{{ __('カテゴリー') }}</label> 15 <select class="form-control" id="category_id" name="category_name"> 16 @foreach ($categories as $category) 17 <option value="{{ $category->category_id }}">{{ $category->category_name }}</option> 18 @endforeach 19 </select> 20 </div> 21 <!-- カテゴリ選択 --> 22 23 </br><button>作成する</button> 24 </div> 25</form> 26
試したこと
コンローラのstoreメソッド
$todo->category_id = $request->category()>id;
の記述に問題がありそうなので
$todo->category_id = $request->category;
などしてみましたが、ダメでした。
categoryのidを選択してそれをcategory_idに送らなければならないと思うのですがどうすれば良いのかわかりませんでした。
理解不足で申し訳ありませんが、ご教授頂ければ幸いです。
補足情報(FW/ツールのバージョンなど)
Laravel9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/03/02 04:00
2023/03/02 05:01
2023/03/02 05:28 編集
2023/03/02 05:19
2023/03/02 05:21
2023/03/02 05:50
2023/03/02 06:22 編集
2023/03/02 06:54
2023/03/02 07:13