代码之家  ›  专栏  ›  技术社区  ›  KiritoLyn

如何循环和比较从单个视图laravel传递的多个数据

  •  1
  • KiritoLyn  · 技术社区  · 7 年前

    我的GlobalController中有这个功能:

    public function edit(Request $request, $id)
    {
        $isChanged = false;
    
        if (!$request) {
            $isChanged = true;
        }
    
        $user = User::find($id);
        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->email = $request->email;
        $user->birth_date = $request->birth_date;
    
        $user->updated_at = \Carbon\Carbon::now();
        $user->save();
    
        if ($isChanged == true) {
            return redirect()->back()->with('updated', "Successfully updated $request->first_name");
        } else {
            return redirect()->back()->with('alert', "No changes $request->first_name");
        }
    }
    

    在我看来,这和这个函数有关,我有:

    <div class="form-row">
         <div class="form-group col-md-6">
              <label for="first_name">First Name</label>
              <input name="first_name" type="text" class="form-control" id="" value="{{ $user->first_name }}" required>
         </div>
         <div class="form-group col-md-6">
              <label for="last_name">Last Name</label>
              <input name="last_name" type="text" class="form-control" id="" value="{{ $user->last_name }}" required>
         </div>
         <div class="form-group col-md-6">
              <label for="email">E-mail</label>
              <input name="email" type="email" class="form-control" id="" value="{{ $user->email }}" required>
         </div>
         <div class="form-group col-md-6">
              <label for="birth_date">Birth Date</label>
              <input name="birth_date" type="date" class="form-control" value="{{ $user->birth_date }}"  required>
         </div>
    </div>
    

    基本上,此模式显示数据库中的当前详细信息( value="{{ $user->last_name }}"

    我希望发生的是,当用户在不做任何更改的情况下保存编辑时,它将继续执行控制器功能中的第二个返回,即 return redirect()->back()->with('alert', "No changes $request->first_name");

    但是,每当我试图保存并且不应用任何更改时,它总是首先返回,即 return redirect()->back()->with('updated', "Successfully updated $request->first_name");

    我怀疑这可能是因为我在上面提到的模态视图中预定义的值。有什么解决办法吗?我想通知用户,如果没有进行任何更改,它将继续进行第二次返回。

    如果需要进一步的详细信息来解决此问题,请通知我。

    编辑:

    在@mozammil和@manzurul hoque rumi的帮助下,我可以使用以下功能解决我的问题:

    public function edit(Request $request, $id)
    {
        $user = User::find($id);
        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->email = $request->email;
        $user->birth_date = $request->birth_date;
        $user->locale_id = $request->locale_id;
    
        $isUserModified = $user->isDirty();
        $user->updated_at = \Carbon\Carbon::now();
        $user->save();
    
        return $isUserModified
            ? redirect()->back()->with('updated', "Successfully updated $request->first_name")
            : redirect()->back()->with('alert', "No changes applied for $request->first_name");
    }
    

    如果有人可以共享相当于 isDirty() 对于旧版本将是一个很大的帮助。再次感谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Mozammil    7 年前

    你应该打电话 isDirty() 之前 save() 行动。例如:

    public function edit(Request $request, $id)
    {
        $user = User::find($id);
    
        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->email = $request->email;
        $user->birth_date = $request->birth_date;
        $user->updated_at = now();
    
        $isChanged = $user->isDirty(); 
    
        $user->save();
    
        return $isChanged 
            ? back()->with('updated', "Successfully updated $request->first_name")
            : back()->with('alert', "No changes $request->first_name");
    }
    
        2
  •  2
  •   Manzurul Hoque Rumi    7 年前

    Laravel有一个内置的功能来检测数据是否被更改以与以前的数据进行比较。当您想知道自从数据库查询模型以来是否对其进行过编辑,或者根本没有保存模型时,可以使用 ->isDirty() 函数

    Laravel Source API