Как зациклить и сравнить несколько данных, переданных из одного представления Laravel - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть эта функция в моем 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");
}

Если кто-то может поделиться PHPэквивалент isDirty() для старых версий будет отличным подспорьем.Еще раз спасибо.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы должны позвонить 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");
}
0 голосов
/ 11 февраля 2019

Laravel имеет встроенную функцию, чтобы определить, были ли изменены данные для сравнения с предыдущими данными.Если вы хотите узнать, была ли модель отредактирована с момента запроса из базы данных или не сохранена вообще, вы используете функцию ->isDirty().

Laravel Source API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...