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 - 除了查询之外,您没有提供任何细节,所以我将做一些假设。
说明-
- 首先你必须在使用预加载之前定义关系
- 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 实例。
希望以上解释对您有所帮助。
我想预加载一个模型,即使它有一个空外键。 我将使用 Adonis 文档页面中的模型来说明:用户和配置文件。
const user = await User.query().preload("profile")
就这么简单!
但在我的例子中,如果用户将键 profile_id 设为 null,它会抛出异常,这意味着它只预加载现有关系(足够公平) .
为了明确起见,我不想只预加载具有现有外键的用户,我需要 both 现有用户相关模型 and users没有要预加载的模型。
我已经阅读并测试了 docs 页面中的示例,但是对于这个案例没有足够的解释(或者我只是没有找到它)。
如有任何提示,我们将不胜感激
我先回答你的问题,YES,你可以preload Fk 也就是NULL.
PS - 除了查询之外,您没有提供任何细节,所以我将做一些假设。
说明-
- 首先你必须在使用预加载之前定义关系
- 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 实例。
希望以上解释对您有所帮助。