• 实体装饰器
    • @Entity
    • @ViewEntity

    实体装饰器

    @Entity

    将模型标记为实体。 实体是一个转换为数据库表的类。你可以在实体中指定表名:

    1. @Entity("users")
    2. export class User {

    此代码将创建一个名为”users”的数据库表。

    你还可以指定一些其他实体选项:

    • name - 表名。 如果未指定,则从实体类名生成表名。
    • database - 所选 DB 服务器中的数据库名称。
    • schema - 架构名称。
    • engine - 在表创建期间设置的数据库引擎(仅在某些数据库中有效)。
    • synchronize - 架构更新中跳过标有false的实体。
    • skipSync - 标有此装饰器的实体将从架构更新中跳过。
    • orderBy - 使用find操作和QueryBuilder指定实体的默认排序。

    例子:

    1. @Entity({
    2. name: "users",
    3. engine: "MyISAM",
    4. database: 'example_dev',
    5. schema: 'schema_with_best_tables',
    6. synchronize: false,
    7. orderBy: {
    8. name: "ASC",
    9. id: "DESC"
    10. }
    11. })
    12. export class User {

    了解有关 Entities的更多信息。

    @ViewEntity

    视图实体是一个映射到数据库视图的类。

    @ViewEntity() 接收以下参数:

    • name - 视图名称。 如果未指定,则从实体类名生成视图名称。
    • database - 所选DB服务器中的数据库名称。
    • schema - 架构名称。
    • expression - 视图定义。 必需参数

    expression可以是带有正确转义的列和表的字符串,取决于所使用的数据库(示例中为postgres):

    1. @ViewEntity({
    2. expression: `
    3. SELECT "post"."id" "id", "post"."name" AS "name", "category"."name" AS "categoryName"
    4. FROM "post" "post"
    5. LEFT JOIN "category" "category" ON "post"."categoryId" = "category"."id"
    6. `
    7. })
    8. export class PostCategory {

    或者是QueryBuilder的一个实例

    1. @ViewEntity({
    2. expression: (connection: Connection) => connection.createQueryBuilder()
    3. .select("post.id", "id")
    4. .addSelect("post.name", "name")
    5. .addSelect("category.name", "categoryName")
    6. .from(Post, "post")
    7. .leftJoin(Category, "category", "category.id = post.categoryId")
    8. })
    9. export class PostCategory {

    注意: 由于驱动程序的限制,不支持参数绑定。请改用文字参数。

    1. @ViewEntity({
    2. expression: (connection: Connection) => connection.createQueryBuilder()
    3. .select("post.id", "id")
    4. .addSelect("post.name", "name")
    5. .addSelect("category.name", "categoryName")
    6. .from(Post, "post")
    7. .leftJoin(Category, "category", "category.id = post.categoryId")
    8. .where("category.name = :name", { name: "Cars" }) // <-- 这是错的
    9. .where("category.name = 'Cars'") // <-- 这是对的
    10. })
    11. export class PostCategory {

    了解有关View Entities的更多信息。