【问题标题】:How to loop and compare multiple data passed from a single view Laravel如何循环和比较从单个视图 Laravel 传递的多个数据
【发布时间】:2019-02-11 14:24:32
【问题描述】:

我的 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-&gt;last_name }}")

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

但每当我尝试保存并且不应用任何更改时,它总是会首先返回 return redirect()-&gt;back()-&gt;with('updated', "Successfully updated $request-&gt;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() 的 PHP 等效项,那将是一个很大的帮助。再次感谢。

【问题讨论】:

    标签: laravel laravel-5.7


    【解决方案1】:

    Laravel 有一个内置函数来检测数据是否更改以与以前的数据进行比较。如果您想知道模型在从数据库中查询后是否已被编辑,或者根本没有保存,则使用-&gt;isDirty() 函数。

    Laravel Source API

    【讨论】:

    • 在我的函数中这是正确的方法吗? if ($user-&gt;isDirty()) { return redirect()-&gt;back()-&gt;with('updated', "Successfully updated $request-&gt;first_name"); }
    • 如果模型发生变化,那么它将返回真,否则返回假。所以是的,你可以这样做。
    • if ($user-&gt;isDirty()) { return redirect()-&gt;back()-&gt;with('updated', "Successfully updated $request-&gt;first_name"); } else { return redirect()-&gt;back()-&gt;with('alert', "No changes applied for $request-&gt;first_name"); } 即使我对其进行了测试并进行了一些信息更改,它也总是会进行第二次返回。我做错了吗?
    • 在这个条件之前你应该使用$user-&gt;save()
    【解决方案2】:

    您应该在save() 操作之前调用isDirty()。例如:

    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");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 2021-11-09
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2015-10-23
      相关资源
      最近更新 更多