如何自动将 属性 从关系附加到根对象?
How can I automatically append a property from a relation to the root object?
如何自动将 属性 从关系附加到根对象,就好像它是来自同一 table 的列,但实际上它来自另一个 table .
假设我有一个 User 模型 hasMany
Emails.
我怎样才能只附加来自 User 模型的第一个 Email 的电子邮件,这样每次我查询 User 模型我觉得它像 属性?
示例:
我在做什么:
(await User.query().where('id', id).with('emails').first()).toJSON()
{
"name": "Eleandro Duzentos",
"emails": [
{ "email": "eleandro@inbox.ru" },
{ "email": "eleandro@mail.ru" }
]
}
我想要的:
(await User.find(id)).toJSON()
{
"name": "Eleandro Duzentos",
"email": "eleandro@inbox.ru"
}
Obs:我不会将电子邮件放在同一个 table 上,因为在很长一段时间内,用户可能需要不止一封电子邮件,但目前只有一封。
我该怎么做?
这是我的代码。您可能会从中得到启发:
型号User
:
...
const Email = use('App/Models/Email')
class User extends Model {
async getEmails() {
let list = []
let emails = await Email.query().where('user_id', this.id).fetch()
emails.rows.forEach(email => {
list.push({ name: this.username, email: email.email })
});
return list
}
emails() {
return this.hasMany('App/Models/Email')
}
}
module.exports = User
控制器:
...
let user = await User.find(1)
return await user.getEmails()
输出:
[
{"name":"CrBast","email":"test@crbast.ch"},
{"name":"CrBast","email":"test2@crbast.ch"}
]
如果这不是你想要的,请随时纠正我:)
对于自定义的 JSON 响应,我建议使用序列化程序。
您可以覆盖默认的序列化程序以获得所需的结果。
如何自动将 属性 从关系附加到根对象,就好像它是来自同一 table 的列,但实际上它来自另一个 table .
假设我有一个 User 模型 hasMany
Emails.
我怎样才能只附加来自 User 模型的第一个 Email 的电子邮件,这样每次我查询 User 模型我觉得它像 属性?
示例:
我在做什么:
(await User.query().where('id', id).with('emails').first()).toJSON()
{
"name": "Eleandro Duzentos",
"emails": [
{ "email": "eleandro@inbox.ru" },
{ "email": "eleandro@mail.ru" }
]
}
我想要的:
(await User.find(id)).toJSON()
{
"name": "Eleandro Duzentos",
"email": "eleandro@inbox.ru"
}
Obs:我不会将电子邮件放在同一个 table 上,因为在很长一段时间内,用户可能需要不止一封电子邮件,但目前只有一封。
我该怎么做?
这是我的代码。您可能会从中得到启发:
型号User
:
...
const Email = use('App/Models/Email')
class User extends Model {
async getEmails() {
let list = []
let emails = await Email.query().where('user_id', this.id).fetch()
emails.rows.forEach(email => {
list.push({ name: this.username, email: email.email })
});
return list
}
emails() {
return this.hasMany('App/Models/Email')
}
}
module.exports = User
控制器:
...
let user = await User.find(1)
return await user.getEmails()
输出:
[
{"name":"CrBast","email":"test@crbast.ch"},
{"name":"CrBast","email":"test2@crbast.ch"}
]
如果这不是你想要的,请随时纠正我:)
对于自定义的 JSON 响应,我建议使用序列化程序。 您可以覆盖默认的序列化程序以获得所需的结果。