実現したいこと
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 Controller 10{ 11 public function index() : View 12 { 13 $hobbys = hobby::all()->sortByDesc('last_use'); 14 return view('hobbies/index', ['hobbies' => $hobbies]); 15 } 16 17 public function create(hobbyPostRequest $request, hobby $hobby) : RedirectResponse 18 { 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() しても反映されないのかわかりません。
どなたかヒントだけでもお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/09/25 10:05 編集
2023/09/25 10:17
2023/09/25 10:56
2023/09/25 12:39
2023/09/25 13:04