目前,我正在与AdonisJS v5打交道,并且在ManyToMany关系方面遇到了一些问题。
我有目前的两种型号
用户
export default class User extends BaseModel {
@column({ isPrimary: true })
public id: Buffer;
...
@manyToMany(() => Family)
public families: ManyToMany<typeof Family>;
}家庭
export default class Family extends BaseModel {
@column({
isPrimary: true,
})
public id: Buffer;
@column({
serializeAs: null,
})
public UserId: Buffer;
public name: string;
@manyToMany(() => User)
public users: ManyToMany<typeof User>;
}然后,我有一个支点表FamilyToUser,它具有UserId和FamilyId的基本结构。
然后,我将通过电子邮件找到用户如下
const user = await User.findBy(
'email',
'email@email.com'
);然后尝试使用ManyToMany加载await user.load('families');关系。
现在,当我循环遍历家庭并输出所有内容时,它并不像我想象的那样拉动模型中的列。如果我做下面的事
await user.load('families', (familyQuery) => {
familyQuery.whereNull('deleted');
});
const familiesJson = user.families.map((family) => family.serialize());
console.log(familiesJson);我会得到如下打印出来的
[ { Id: 'fc7ffd40-298c-11ed-ad7e-759bb78c2a4c' } ]如您所见,它只返回Id列,而不返回name列。现在,如果按以下方式打印出这个家庭
user.families.forEach((family) => {
console.log(family);
});我得到以下打印输出
Family {
...
'$extras': {
name: 'Surname',
pivot_Userid: <Buffer 11 ed 29 8a fa 64 f7 60 98 47 89 c2 78 79 62 24>,
pivot_Familyid: <Buffer 11 ed 29 8c fc 7f fd 40 ad 7e 75 9b b7 8c 2a 4c>
},
...
}其中,它将列和pivot表Fks打印到$extras属性中。查看找到的这里文档,该属性应该只包含枢轴表列。
所以,我要问的是,如何让它正确地加载我的家庭模型的名称,等等。其中还有其他列(createdAt,updatedAt等),但为了简洁起见,我刚刚删除了这些列。
提前感谢您的帮助。我已经被困在这上面两天了
发布于 2022-09-01 21:18:51
好的。所以我觉得自己像个白痴。基本上,我有一个使用PascalNamingCase的策略,它在数据库中查找列"Name“,但是,我将其称为”name“.
因此,解决方案,确保您的列名与您的命名策略相匹配,否则Adonis将取出列,但不会像您想象的那样匹配它们。
https://stackoverflow.com/questions/73564260
复制相似问题