如何使用 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.HasOneRelationModel.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错误