书架关系检测是否已获取

Bookshelf relation detect if fetched

如何确定 Bookshelf hasMany 关系是否根本没有加载或只是空的?

根据 Bookshelfjs 文档:

The related method returns a specified relation loaded on the relations hash on the model, or calls the associated relation method and adds it to the relations hash if one exists and has not yet been loaded. Model#related

如果将 { withRelated: ['relation'] } 赋给 fetch,如果将 debug: true 赋给 Knex,则加载关系可以看到输出,并且 related('relation') 包含模型(如果存在) .

但是,如果没有相关模型,related('relation') 的 return 值似乎与根本不提供 withRelated 选项时相同,即。它不能用于确定数据之前是否已加载。多次调用 related('relation').fetch() 会导致 SQL 次查询。

我是在做一些根本性的错误,还是我真的只需要为关系构建自己的缓存?我有需要过滤的关系,并且希望模型实例对过滤后的数据有很好的 getter,而不必在每次调用时从数据库中重新获取关系。

官方没有办法,见GitHub issue.


但如果你愿意,你可以通过官方不支持的方式查看:

modelInstance.relations[relationName]
// e.g.
user.relations.organization // undefined if not fetched yet