- 实体装饰器
@Entity
@ViewEntity
实体装饰器
@Entity
将模型标记为实体。 实体是一个转换为数据库表的类。你可以在实体中指定表名:
@Entity("users")
export class User {
此代码将创建一个名为”users”的数据库表。
你还可以指定一些其他实体选项:
name
- 表名。 如果未指定,则从实体类名生成表名。database
- 所选 DB 服务器中的数据库名称。schema
- 架构名称。engine
- 在表创建期间设置的数据库引擎(仅在某些数据库中有效)。synchronize
- 架构更新中跳过标有false
的实体。skipSync
- 标有此装饰器的实体将从架构更新中跳过。orderBy
- 使用find
操作和QueryBuilder
指定实体的默认排序。
例子:
@Entity({
name: "users",
engine: "MyISAM",
database: 'example_dev',
schema: 'schema_with_best_tables',
synchronize: false,
orderBy: {
name: "ASC",
id: "DESC"
}
})
export class User {
了解有关 Entities的更多信息。
@ViewEntity
视图实体是一个映射到数据库视图的类。
@ViewEntity()
接收以下参数:
name
- 视图名称。 如果未指定,则从实体类名生成视图名称。database
- 所选DB服务器中的数据库名称。schema
- 架构名称。expression
- 视图定义。 必需参数。
expression
可以是带有正确转义的列和表的字符串,取决于所使用的数据库(示例中为postgres):
@ViewEntity({
expression: `
SELECT "post"."id" "id", "post"."name" AS "name", "category"."name" AS "categoryName"
FROM "post" "post"
LEFT JOIN "category" "category" ON "post"."categoryId" = "category"."id"
`
})
export class PostCategory {
或者是QueryBuilder的一个实例
@ViewEntity({
expression: (connection: Connection) => connection.createQueryBuilder()
.select("post.id", "id")
.addSelect("post.name", "name")
.addSelect("category.name", "categoryName")
.from(Post, "post")
.leftJoin(Category, "category", "category.id = post.categoryId")
})
export class PostCategory {
注意: 由于驱动程序的限制,不支持参数绑定。请改用文字参数。
@ViewEntity({
expression: (connection: Connection) => connection.createQueryBuilder()
.select("post.id", "id")
.addSelect("post.name", "name")
.addSelect("category.name", "categoryName")
.from(Post, "post")
.leftJoin(Category, "category", "category.id = post.categoryId")
.where("category.name = :name", { name: "Cars" }) // <-- 这是错的
.where("category.name = 'Cars'") // <-- 这是对的
})
export class PostCategory {
了解有关View Entities的更多信息。