首页 > 解决方案 > 如何在关系中使用 findOrCreate - Adonis.js

问题描述

我有一个用户表和一个用户地址表。

所以在地址路线的改变中我想做一些骗局

查找或创建

我已经完成了关系../Models/User.js

address() {
  return this.hasOne('App/Models/UserAddress')
}

注意:关系有效

await user.posts().fetch()

它完美无缺

但下面的代码不起作用

const user = await User.findOrFail(auth.user.id)
const data = await request.only([
  'street',
  'number',
  'complement',
  'district',
  'city',
  'state',
  'zip'
])

user.address().findOrCreate(data)

但这会产生错误

user.address (...). findOrCreate is not a function

有人可以告诉我Find Or Create在人际关系中做到这一点的最佳方式吗?

标签: javascriptadonis.js

解决方案


不,那是行不通的。hasOne返回HasOneobject,它是一个BaseRelation对象,它没有findOrCreate,仅适用于 Lucid Models。

我建议,因为您已经拥有用户 ID,并且我假设这是您的Address班级引用的外键来执行此操作

await Address.findOrCreate(
 { user: auth.user.id },
 {
   ... your data here,
 }
)

推荐阅读