仅获取修改后的值

Get only modified values

我正在更新模型,需要 return 仅更改已更改的值。

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 什么都没有 return 那么我该怎么做呢?

基本上,它 user.dirty 属性 在你之前 await user.save()

要知道哪些属性已经/将要更新,您需要比较用户模型实例 saved() 之前的 user.$attributesuser.$originalAttributes。在 merge 之后 'difference' 存储在 user.dirty 属性 中。

下面这个截图是我做merge()之前截的,可以看到user.$attributesuser.$originalAttributes类似,user.dirty属性是空的. (user.isDirty = 假)

这张截图是我merge()之后拍的。用户 first_name 将被更新(至 'first name ---- changed'),而用户 last_name 将保持不变('last name'),您现在可以看到 user.dirty = {first_name: 'first name --- changed'},它包含 first_name 键及其待更新的值。 (user.isDirty = 真)

所以。它是:

  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