a2221070
@a2221070

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!

Laravel todoリストアプリの制作におけるupdateメソッドについて

解決したいこと

laravelを用いてtodoリストアプリを制作中なのですが、更新処理の記述の修正方法がわかりません。 
更新ボタンを押すと既存のタスク名も変更されてしまい、尚且つ更新したいタスクも更新されません。 
追加や削除のボタンを押すと一応元には戻ります。 
更新処理の部分でどこを修正すればいいのかご教示頂きたいです。
ちなみに他の機能(タスク一覧の表示、タスクの追加、タスクの削除)は正しく処理が行えております。

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

エラー等は特に出ていないです。

該当するソースコード

index.blade.phpの該当箇所が 
@foreach($todos as $todo)

        <tr>
        <td>
          {!! $todo->updated_at !!}
        </td>
        
          
         <td>
          {!! Form::text('content_update',$todo->content,['class' => 'input-update']) !!} 
          </td>
          <td>
            <button class="button-update">更新</button>
          </td>
        {!! Form::close() !!}
        <td>
            <button type="button" class="button-delete" onclick="location.href='{{ route('delete',$todo) }}'">削除</button>  {{--上記のフォームタグのやり方と同じでurlにてdeleteと$todoを付け足している--}}
          
        </td>
      </tr>

@endforeach

でTodoRequest.phpの該当箇所が 
public function rules()
{
return [
'content' => 'required| max:20',
'content_update' => 'required| max:20',

        //
    ];
}

public function messages()
{
    return[
        'content.required' => '・タスクを入力してください',
        'content.max' => '・タスクは20文字以内で入力してください。',
    ];
    }


TodoController.phpの該当箇所が 
class TodoController extends Controller
{
public function index(){
$todos = Todo::get();
return view('index',compact('todos'));
}
public function store(TodoRequest $request){

    $todo = new Todo();
    $todo->content = $request->content;
    $todo->save();
    return redirect()->route('index');
}
public function update(TodoRequest $request, Todo $todo){
    
    $todo->content = $request->content_update;
    $todo->save();
    return redirect()->route('index');
}
public function delete(Todo $todo){
    $todo->delete();
    return redirect()->route('index');
}

です。 

このtodoリストアプリの全コードはgithub上に掲載していますのでurlを添付しておきます。 
ずっと悩んでいるのですが一向に解決しないので是非ともご回答頂けたら大変嬉しい次第です。

自分で試したこと

ネットでフォームファザードの使い方を確認した。

0

1Answer

GitのURLが404であったりとか、コードの引用の仕方がまずくて、読み難いです、というのはあるのですが……ざっとindex.blade.phpを見て思ったのですが、このフォームでデータを渡されると「どのタスク」を更新して良いのか解らなくなりますね。
サーバ側はブラウザから送信されたデータだけを見て処理をするので、「利用者がどのタスクを更新したか」ということはFORM内に含めて明示的に送信しないと分かりません。
たぶんLaravel内部でのSQLでUPDATEにWHERE句が使われない(WHERE句で対象を絞りようがない)状態なので全レコード更新になっているような気がします。

0Like

Your answer might help someone💌