Получить только измененные значения - PullRequest
0 голосов
/ 06 мая 2020

Я обновляю модель и мне нужно вернуть ТОЛЬКО те значения, которые были изменены.

const data = request.only(['name', 'email', 'address', 'age'])
const user = await user.findOrFail(data.id)
user.merge({ nome: data.name, email: data.email, endereco: data.address, age: data.age })

await user.save()

merge ничего не возвращает, так как я могу это сделать?

1 Ответ

2 голосов
/ 06 мая 2020

По сути, это свойство user.dirty перед вами await user.save().

Чтобы узнать, какие атрибуты были / будут обновлены, вам нужно сравнить user.$attributes и user.$originalAttributes перед экземпляром модели пользователя saved(). «Разница» сохраняется в свойстве user.dirty после merge.

Этот снимок экрана ниже был сделан до того, как я сделал merge(), вы можете видеть, что user.$attributes похоже на user.$originalAttributes, а свойство user.dirty пусто. (user.isDirty = false)

enter image description here

И этот снимок экрана был сделан после того, как я сделал merge(). Пользователь first_name будет обновлен (до 'имя ---- изменено'), а пользователь last_name останется без изменений ('фамилия'), теперь вы можете видеть user.dirty = {first_name: 'first name --- changed'}, он содержит ключ first_name и его значение, которое будет обновлено. (user.isDirty = true)

enter image description here

Итак. Это:

  const user = await User.findOrFail(1)

  console.log('exists user', user)

  user.merge({
    first_name: 'first name --- updated',
    last_name: 'last name'
  })

  console.log('user before updated', user)

  const output = user.isDirty ? user.dirty : {} // {} mean no attributes will be updated

  console.log('attribute that will be updated', output)

  await user.save()

  return output
...