実現したいこと
controller で update() をしても反映がされない。
前提
Laravel 初心者です
Laravel10 で入力欄を作っています。
- Laravel で例えば趣味を入力する欄を select で作る
- リストにないものは input:text で入力する
- ただし text の値は select の値と重複しない
- これを一つの入力フォームで実現したい
- 最後にアクセスされた値をリストの最上段にもっていきたい( updated_at を上げる?もしくは専用のカラム(以下の例では last_use )を使う?)
これで 4. までは実現することができました。
発生している問題・エラーメッセージ
$hobby -> update();
は実行されていて選択された趣味の id を $message として返して表示していますが、実際には変更がテーブルに反映されていません。
該当のソースコード
例えば index.blade.php は
html
1<select name="hobby">2<option value="1">映画</option>3<option value="2">旅行</option>4<otpion value="3">筋トレ</option>5</select>6<input type="text" name="hobby_new">
として、hobby にない値を入力したい際に hobby_new に値を入力し submit したとします。
これを趣味用テーブル hobbies に登録し、次回以降は例えば <option value="4">ゲーム</option>と追加したいと考えています。
コントローラは以下のような感じです
PHP
1namespace App\Http\Controllers;2 3use Illuminate\Http\Request;4use App\Http\Requests\HobbyPostRequest; // バリデーション用5use Illuminate\Http\RedirectResponse;6use Illuminate\View\View;7use App\Models\Hobby;8 9class HobbyController extends Controller10{11 public function index() : View12 {13 $hobbys = hobby::all()->sortByDesc('last_use');14 return view('hobbies/index', ['hobbies' => $hobbies]);15 }16 17 public function create(hobbyPostRequest $request, hobby $hobby) : RedirectResponse18 {19 $hobby = new hobby();20 $hobby -> last_use = date("Y-m-d H:i:s");21 if($request -> hobby_new){22 $hobby -> hobby = $request -> hobby_new;23 $hobby -> save();24 $message = $hobby -> hobby .'を追加しました';25 }else{26 $hobby -> id = $request -> id;27 $hobby -> update();28 $message = $hobby -> id .'を変更しました';29 }30 return redirect('hobbies')->with('message', $message);31}
試したこと
気になったので調べてみたところ $hobby -> update(); の戻り値は TRUE になっていました。
なぜ update() しても反映されないのかわかりません。
どなたかヒントだけでもお願いいたします。

0 コメント