Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有可能使hasMany关系的行为类似于环回4中的实际属性_Javascript_Loopbackjs - Fatal编程技术网

Javascript 是否有可能使hasMany关系的行为类似于环回4中的实际属性

Javascript 是否有可能使hasMany关系的行为类似于环回4中的实际属性,javascript,loopbackjs,Javascript,Loopbackjs,我正在使用环回4构建一个API。是否可以将关系当作实际属性来使用 API将事件(如音乐会)存储在数据库的events表中,将事件日期存储在event_dates表中。我已使用此[1]说明成功地将hasMany关系添加到事件模型,并将belongsTo关系添加到EventDate模型(一个事件可以有多个EventDate) 虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eve

我正在使用环回4构建一个API。是否可以将关系当作实际属性来使用

API将事件(如音乐会)存储在数据库的events表中,将事件日期存储在event_dates表中。我已使用此[1]说明成功地将hasMany关系添加到事件模型,并将belongsTo关系添加到EventDate模型(一个事件可以有多个EventDate)

虽然我可以使用eventRepository.dates(eventId)查询日期,但在我请求时没有可用的日期–如果不单独询问eventRepository.dates(eventId),如何实现这一点

另一方面,我想在不单独发布和修补事件日期的情况下发布和修补事件–只需几行代码就可以了吗

这就是我现在需要在/events下提供dates字段的原因(似乎不是正确的方法):

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