如何使用 withGraphJoined 获取单行?
How to fetch single row using withGraphJoined?
有两个表 users 和 activities。
我可以使用 withGraphJoined
加入这些。响应json是这样的,
[
{
user: 'first',
activity: [{ type: 'act1' }, { type: 'act2' }],
},
{
user: 'second',
activity: [{ type: 'act3' }, { type: 'act2' }],
},
];
现在我只想获取第一个 activity 并将当前数组变成第一个 activity 对象。 {user:"second", activity:{type:"act3}}
我试过了,但我仍然得到了数组中的所有 activity。
User.query()
.withGraphJoined('activity')
.modifyGraph('activity', (builder) => builder.first());
这取决于你如何定义关系
如果你想让它 return 一个单一的对象,那么关系应该使用 Model.HasOneRelation
或 Model.BelongsToOneRelation
但是,如果您只想 return 从多个 activity 中选出一个,则可以限制结果
.modifyGraph('activity', (builder) => builder.orderBy('created_at', 'desc').limit(1));
但它仍然会 return 一个包含一项的数组,您可以通过 activity[0]
访问
我能想到的唯一方法是,如果您手动映射 then
中的第一项,例如
.then(user => {
user.activity = user.activity[0] ? user.activity[0] : {}
res.json(user)
})
为了保险起见,可以先检查该item是否存在,避免null错误
有两个表 users 和 activities。
我可以使用 withGraphJoined
加入这些。响应json是这样的,
[
{
user: 'first',
activity: [{ type: 'act1' }, { type: 'act2' }],
},
{
user: 'second',
activity: [{ type: 'act3' }, { type: 'act2' }],
},
];
现在我只想获取第一个 activity 并将当前数组变成第一个 activity 对象。 {user:"second", activity:{type:"act3}}
我试过了,但我仍然得到了数组中的所有 activity。
User.query()
.withGraphJoined('activity')
.modifyGraph('activity', (builder) => builder.first());
这取决于你如何定义关系
如果你想让它 return 一个单一的对象,那么关系应该使用 Model.HasOneRelation
或 Model.BelongsToOneRelation
但是,如果您只想 return 从多个 activity 中选出一个,则可以限制结果
.modifyGraph('activity', (builder) => builder.orderBy('created_at', 'desc').limit(1));
但它仍然会 return 一个包含一项的数组,您可以通过 activity[0]
访问
我能想到的唯一方法是,如果您手动映射 then
中的第一项,例如
.then(user => {
user.activity = user.activity[0] ? user.activity[0] : {}
res.json(user)
})
为了保险起见,可以先检查该item是否存在,避免null错误