如何循环和比较,从一个单一的视图Laravel通过多个数据

问题描述 投票:2回答:2

我在我的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鲁米的帮助下,我才能够使用这个功能来解决我的问题:

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

如果任何人都可以分享的PHP相当于isDirty()的旧版本将是一个很大的帮助。再次感谢。

laravel laravel-5.7
2个回答
1
投票

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
投票

Laravel有一个内置的功能,如果数据被更改与以前的数据进行比较来检测。当你想知道,如果该模型已经被编辑过,因为它是从数据库中查询,或根本不保存,那么你使用->isDirty()功能。

Laravel Source API

© www.soinside.com 2019 - 2024. All rights reserved.