Изменение данных поля не работает в Laravel - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь проверить, изменилось ли значение в модели Laravel, isDirty никогда не выполняется. Если я удаляю isDirty Обновление данных работает нормально, только ìsDirty не работает.

public function update(TeacherRequest $request, $id)
{
    $teacher = Teacher::find($id);

    if ($teacher->isDirty($request)) {
        $new_data = $teacher->$request;
        $old_data = $teacher->getOriginal($request);
        return response()->json([
            'msg' => $new_data,
            'msg' => $old_data
        ]);
    }

    if ($teacher->save()) {
        $teacher->update($request->all();
    }
}

Я также пытался проверить только one column, если оно было изменено.

Проверка на один столбец:

if ($teacher->isDirty('efirst')) {
    $new_data = $teacher->efirst;
    $old_data = $teacher->getOriginal('efirst');
    return response()->json([
        'msg' => $new_data,
        'msg' => $old_data
    ]);
}

efirst - это имя первого столбца и поля ввода.

Я ничего не получаю, даже если я изменяю данные.

1 Ответ

1 голос
/ 04 ноября 2019

Так не работает. isDirty() модели вернет true, если поля были изменены в самой модели. Он ожидает один необязательный параметр, который представляет собой список параметров для проверки , а не их новые значения. Если вы проверите isDirty() сразу после Model::find(), он всегда вернет false . Поэтому вам нужно сделать это наоборот:

  1. Найти модель
  2. Установить новые поля из запроса (не сохранять!)
  3. Проверить isDirty()
...