Javascript 是否有可能使hasMany关系的行为类似于环回4中的实际属性
我正在使用环回4构建一个API。是否可以将关系当作实际属性来使用 API将事件(如音乐会)存储在数据库的events表中,将事件日期存储在event_dates表中。我已使用此[1]说明成功地将hasMany关系添加到事件模型,并将belongsTo关系添加到EventDate模型(一个事件可以有多个EventDate) 虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eventId),如何实现这一点 另一方面,我想在不单独发布和修补事件日期的情况下发布和修补事件–只需几行代码就可以了吗 这就是我现在需要在/events下提供dates字段的原因(似乎不是正确的方法):Javascript 是否有可能使hasMany关系的行为类似于环回4中的实际属性,javascript,loopbackjs,Javascript,Loopbackjs,我正在使用环回4构建一个API。是否可以将关系当作实际属性来使用 API将事件(如音乐会)存储在数据库的events表中,将事件日期存储在event_dates表中。我已使用此[1]说明成功地将hasMany关系添加到事件模型,并将belongsTo关系添加到EventDate模型(一个事件可以有多个EventDate) 虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eve
const events=wait this.eventRepository.find(filter);
for(事件中的事件){
event.dates=等待此.eventRepository.dates(eventId.find())
}
当我想添加新事件时,我需要执行以下操作:
POST /events
POST /events/:id/event-dates
POST /events/:id/event-dates
...
请注意:我正在寻找环回框架中已有的解决方案。实现这些东西不是问题所在,我只是希望它尽可能简短和可维护
[1]
虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eventId),如何实现这一点
我们称此功能为“包含相关模型”,不幸的是,它尚未实现。您可以在此处跟踪进度:
另一方面,我想在不单独发布和修补事件日期的情况下发布和修补事件–只需几行代码就可以了吗
如果我理解正确,您希望通过单个RESTAPI调用更新Event
和EventDate
实例。我们不支持该功能,老实说,我不确定我们是否会支持
这就是我现在需要在/events下提供dates字段的原因(似乎不是正确的方法)
您的解决方案容易受到所谓的“选择1+N问题”的影响(参见示例)。如果事件有N个日期,则进行1+N个数据库查询
更好的解决方案是利用环回的inq
操作符:
consteventids=events.map(e=>e.id);
const dates=wait this.datesRepository.find({where:{eventId:{inq:eventIds}}});
//将“日期”条目复制到相关的“事件”项
//通过将“dates[].eventId”与“events[].id”匹配
如果查询的事件数很高,则需要将eventIds
数组拆分为较小的块,并多次调用this.datesRepository.find
无论如何,这就是我们将在不久的将来在环回中实现的要点
因为您正在寻找一个已经在框架中实现的解决方案,所以您发布的代码片段基本上就是这样
虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eventId),如何实现这一点
我们称此功能为“包含相关模型”,不幸的是,它尚未实现。您可以在此处跟踪进度:
另一方面,我想在不单独发布和修补事件日期的情况下发布和修补事件–只需几行代码就可以了吗
如果我理解正确,您希望通过单个RESTAPI调用更新Event
和EventDate
实例。我们不支持该功能,老实说,我不确定我们是否会支持
这就是我现在需要在/events下提供dates字段的原因(似乎不是正确的方法)
您的解决方案容易受到所谓的“选择1+N问题”的影响(参见示例)。如果事件有N个日期,则进行1+N个数据库查询
更好的解决方案是利用环回的inq
操作符:
consteventids=events.map(e=>e.id);
const dates=wait this.datesRepository.find({where:{eventId:{inq:eventIds}}});
//将“日期”条目复制到相关的“事件”项
//通过将“dates[].eventId”与“events[].id”匹配
如果查询的事件数很高,则需要将eventIds
数组拆分为较小的块,并多次调用this.datesRepository.find
无论如何,这就是我们将在不久的将来在环回中实现的要点
因为您正在寻找一个已经在框架中实现的解决方案,所以您发布的代码片段几乎就是这样。非常感谢您的回复,我想我可以处理它。您说,您认为环回不会在一个请求中支持更新资源及其关系—这里的最佳实践是什么?当我的表单结合事件数据和日期时,我是否需要向两个不同的端点发出不同的POST请求?当我使用
@property.array
而不是@hasmally
时,它可以完成我自己希望的所有事情。唯一的问题是。。。它将相关的事件日期存储在一个数据库字段中,这并不像我所期望的那样干净。>当我使用@property.array
而不是@hasMany
时,它完成了我所希望的所有事情。唯一的问题是。。。它将相关的事件日期存储在一个数据库字段中,没有我想要的那么干净。非常感谢您的回复,我认为我可以处理它。您说过,您认为环回永远不会支持在单个请求中更新资源及其关系–W