我在我的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()
的旧版本将是一个很大的帮助。再次感谢。
在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");
}
Laravel有一个内置的功能,如果数据被更改与以前的数据进行比较来检测。当你想知道,如果该模型已经被编辑过,因为它是从数据库中查询,或根本不保存,那么你使用->isDirty()
功能。