Laravel isDirty метод массового назначения - PullRequest
0 голосов
/ 04 ноября 2019

Мой код сохраняет данные только одного field(efirst), если он был изменен методом isDirty () и работает правильно. Как я могу добиться того же результата, если у меня есть десять полей без записи каждого имени поля?

Контроллер:

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

    if ($teacher->isDirty()) {
        $new_data = $teacher->efirst;
        $old_data = $teacher->getOriginal('efirst');

        if ($teacher->save()) {
            $teacher->update($request->except('qual_id', 'id', 'profile_pic'));

            DB::table('teacher_logs')->insert(
                [
                    'user_id' => $user->id,
                    'teacher_id' => $teacher->id,
                    'old_value' => $old_data,
                    'new_value' => $new_data,
                ]);
        }
    }
}

1 Ответ

0 голосов
/ 04 ноября 2019

Если вы не хотите писать $teacher->field = $request->value; несколько раз, вы можете использовать цикл:

foreach($request->except("_token") AS $field => $value){
  $teacher->{$field} = $value;
}

if($teacher->isDirty()){
  $new_data = [];
  $old_data = [];
  foreach($request->except("_token") AS $field => $value){
    $new_data[$field] = $value;
    $old_data[$field] = $teacher->getOriginal($field);
  }
}

Примечание: вам нужно будет преобразовать $new_data и $old_data вмассивы, чтобы вы могли ссылаться на каждое поле и значение должным образом и выполнять дополнительную логику для вставки вашей таблицы teacher_logs для обработки, но это должно дать вам представление.

...