1

我是 TypeScript 的新手

const conversations = await Conversation
                .query()
                .whereRaw("FIND_IN_SET(" + user_id + ", participants)")
                .orderBy("last_message_timestamp", "desc")
                .limit(10)
                .offset(a)
    
    var conversations_array: any = [];
    
    for (var i = 0; i < conversations.length; i++) {
    conversations_array.push(conversations[i]);
    }
    
    for (var i = 0; i < conversations.length; i++) {
    conversations_array[i].last_message = "Test";
    }
    
    return conversations_array

它从 Lucid(Adonis JS 数据库 ORM)获取数据,并将这些数据推送到一个名为 conversations_array 的数组中。

然后我向名为“last_message”的对象数组添加另一个键

问题是当我从 API 返回该对话数组时,我只能看到数据库字段,而看不到“last_message”键。如何返回包括“last_message”在内的整个对话数组?

例如我可以看到这个

return conversations_array[0].last_message
4

1 回答 1

0

你的Conversation模型应该有一个last_message属性,比如(如果你使用的是 Typescript):

@column()
public lastMessage: number;

如果您不想保留此属性(或数据库表中不存在此属性),您可以根据所选列填充模型对象:

在您的模型中:

public static get columns() {
    return [
        ...
        all previous columns without lastMessage (comma separated)
        ...
    ]
}

我个人根据我的列数组构建了一个函数来填充它:

export function getFieldsToUpdate(requestFields: any, fieldNames: string[]) {
  let fieldsToUpdate = {};

  fieldNames.forEach((fieldName) => {
    if (fieldName in requestFields)
      fieldsToUpdate[fieldName] = requestFields[fieldName];
  });
  return fieldsToUpdate;
}

然后在控制器中我会使用:

conversation.fill(getFieldsToUpdate(request.all(), Conversation.columns));

这样我就可以在没有 last_message 属性的情况下填充对象

于 2021-03-10T17:59:00.090 回答