AdonisJS 5 - 即使外键为空也预加载模型

AdonisJS 5 - preload model even if foreign key is null

我想预加载一个模型,即使它有一个空外键。 我将使用 Adonis 文档页面中的模型来说明:用户和配置文件。

const user = await User.query().preload("profile")

就这么简单!

但在我的例子中,如果用户将键 profile_id 设为 null,它会抛出异常,这意味着它只预加载现有关系(足够公平) .

为了明确起见,我不想只预加载具有现有外键的用户,我需要 both 现有用户相关模型 and users没有要预加载的模型。

我已经阅读并测试了 docs 页面中的示例,但是对于这个案例没有足够的解释(或者我只是没有找到它)。

如有任何提示,我们将不胜感激

我先回答你的问题,YES,你可以preload Fk 也就是NULL.

PS - 除了查询之外,您没有提供任何细节,所以我将做一些假设。

说明-

  1. 首先你必须在使用预加载之前定义关系
  2. Relationsgip 应该在包含 FK 的 table 中定义,在我们的例子中,它的 User table. 例如
//User.ts or User.js
import Profile from '/path/to/profile';

...
  @column()
  public profileId: number;

  @belongsTo(() => Profile)
  public profile: BelongsTo<typeof Profile>;
...

如您所见,我已经在用户 table 中创建了一个关系。 即

  @belongsTo(() => Profile)
  public profile: BelongsTo<typeof Profile>;

完成后,您可以查询用户和预加载配置文件。

const user = await User.query().preload("profile")

现在,如果用户有个人资料,那么它将被预加载(加入),输出将是这样的

User {
 id: <random-number>,
 profileId: <random-number>,
 profile: {
  ...
 },
 ...
}

如果 profileId 为 null,那么输出将是这样的

User {
 id: <random-number>,
 profileId: null,
 ...
}

ps - user 变量是一个 User 实例数组,我给出的例子只有 1 个 User 实例。

希望以上解释对您有所帮助。