如何向 MedusaJS 中的现有实体添加自定义字段

Öme*_*TAŞ 3 postgresql entity typescript typeorm medusajs

我想向MedusaJS 服务器应用程序中的ProductCollection实体添加一个自定义字段(名为description) 。到目前为止我所遵循的是:

  • 在文件夹下创建一个新文件src/models,其中myCollection.ts包含以下内容
import { Column, Entity } from "typeorm";
import { ProductCollection } from "@medusajs/medusa";

@Entity()
export class MyProductCollection extends ProductCollection {
  @Column({ type: "varchar" })
  description: string | null;
}

Run Code Online (Sandbox Code Playgroud)
  • 使用此命令创建了一个迁移:npx typeorm migration:create -n DescriptionAdded --dir src/migrations它在src/migrations名为的文件夹下给了我新文件1674744755671-DescriptionAdded.ts,我编辑了该文件,如下所示:
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";

export class DescriptionAdded1674744755671 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.addColumn(
      "product_collection",
      new TableColumn({
        name: "description",
        type: "varchar",
        isNullable: true,
      })
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.dropColumn("product_collection", "description");
  }
}

Run Code Online (Sandbox Code Playgroud)

然后我使用此命令运行迁移medusa migrations run。正如我所料,它在数据库表中创建了该字段。然后我通过这个命令构建了 medusa 应用程序yarn run build。我用 重新启动了应用程序yarn run start。我正在使用最新的 medusajs 服务器应用程序和最新的 medusa 包,即1.7.5

我期望的是当我调用以下 api 时获取该字段:

http://localhost:9000/store/collections

我使用以下命令创建了 medusajs 服务器应用程序:

yarn global add @medusajs/medusa-cli
medusa new my-medusa-store --seed
Run Code Online (Sandbox Code Playgroud)

我正在本地运行 medusa 服务器应用程序,它没有提供名为description的新字段。

我找不到如何将自定义字段添加到 medusa 服务器应用程序。扩展 medusajs 服务器应用程序中现有实体的方法是什么?我已经看到medusa-extender存储库,但它没有显示任何示例如何执行此操作。

我希望你能帮助我。

谢谢

我已经使用 medusa/cli 安装了 medusa 服务器应用程序并添加了上述文件。我在medusajs网站上找不到任何关于此的文档。

oli*_*rbl 5

《美杜莎》的合著者在这里。

我们通常建议开发人员不要使用额外的列来扩展核心数据库架构,因为这可能会损害设置的可维护性。因此,我们不公开本地方法来执行此操作。不过,我们计划在不久的将来添加自定义字段 API,这将有效地允许您扩展架构,但不是直接扩展。它可能会按照 EAV 模式来完成。

另外,您似乎可能将新实体与附加表列混淆了。当您在 中添加模型时/src/models,您将新添加到数据库中,而不是列。在这里阅读更多内容。

我没有使用 TypeormaddColumn功能的经验,所以我无法透露这会如何影响您的设置。我能说的是,我们查询大多数GET /store/*端点中实体的一组默认字段和关系。如果您没有明确提供附加字段,它们将不会成为响应的一部分。

关于扩展器,您确实可以使用它来扩展您的数据库模式,但同样,它也有一个警告,即可能会损害实例的可维护性和未来的升级路径。