如何在包含在 mixin 中的模型上的 Loopback 4 中设置 table 名称?
How to set table name in Loopback 4 on a model that is wrapped in mixin?
我需要在 Loopback 4 模型上显式设置数据库 table 名称。我使用 @model
装饰器来做到这一点,如下所示:
@model({settings: {postgresql: {schema: 'public', table: 'dbtablename'}}})
class MyModel extends Entity {
...
在简单的情况下,它工作正常。但是我现在需要 扩展 模型,使用 AuditMixin
添加时间戳 属性 到模型。这采用上面声明的模型和 returns 扩展模型。
这是 mixin 的代码:
import {MixinTarget} from '@loopback/core';
import {property} from '@loopback/repository';
export function AuditMixin<T extends MixinTarget<object>>(baseClass: T) {
class Mixin extends baseClass {
timestamp: Date;
constructor(...args: any[]) {
super(args);
this.timestamp= new Date();
}
}
return Mixin;
}
Mixin 用法:
class MyModelWithMixin extends AuditMixin(MyModel) {}
问题:
Loopback 似乎不尊重我在装饰器中提供的 table 名称。在我的数据库日志中,我可以看到它试图访问 table public.mymodelwithmixin
。数据库日志行是:
ERROR: relation "public.mymodelwithmixin" does not exist at character xyz
结果证明解决方案非常简单:我需要装饰我使用 mixin 的地方。
@model({
settings: {postgresql: {schema: 'public', table: 'dbtablename'}},
})
class MyModelWithMixin extends AuditMixin(MyModel) {}
我需要在 Loopback 4 模型上显式设置数据库 table 名称。我使用 @model
装饰器来做到这一点,如下所示:
@model({settings: {postgresql: {schema: 'public', table: 'dbtablename'}}})
class MyModel extends Entity {
...
在简单的情况下,它工作正常。但是我现在需要 扩展 模型,使用 AuditMixin
添加时间戳 属性 到模型。这采用上面声明的模型和 returns 扩展模型。
这是 mixin 的代码:
import {MixinTarget} from '@loopback/core';
import {property} from '@loopback/repository';
export function AuditMixin<T extends MixinTarget<object>>(baseClass: T) {
class Mixin extends baseClass {
timestamp: Date;
constructor(...args: any[]) {
super(args);
this.timestamp= new Date();
}
}
return Mixin;
}
Mixin 用法:
class MyModelWithMixin extends AuditMixin(MyModel) {}
问题:
Loopback 似乎不尊重我在装饰器中提供的 table 名称。在我的数据库日志中,我可以看到它试图访问 table public.mymodelwithmixin
。数据库日志行是:
ERROR: relation "public.mymodelwithmixin" does not exist at character xyz
结果证明解决方案非常简单:我需要装饰我使用 mixin 的地方。
@model({
settings: {postgresql: {schema: 'public', table: 'dbtablename'}},
})
class MyModelWithMixin extends AuditMixin(MyModel) {}