Как добавить настраиваемое поле в существующую сущность в MedusaJS

Я хотел бы добавить настраиваемое поле (с именем description) в объект ProductCollection в серверном приложении MedusaJS. До сих пор я следил за тем, что:

  • создал новый файл под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;
}

  • создал миграцию с помощью этой команды: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");
  }
}

Затем я запускаю миграцию с помощью этой команды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

Я запускаю серверное приложение Medusa на своем локальном компьютере, и оно не дает нового поля с именем description .

Я не мог найти, как добавить пользовательское поле в приложение сервера медузы. Как можно расширить существующие сущности в серверном приложении medusajs? Я видел репозиторий medusa-extender , но он не показывает ни одного примера, как это сделать.

Я надеюсь, что вы могли бы мне помочь.

Спасибо

Я установил серверное приложение medusa с помощью medusa/cli и добавил файлы, описанные выше. Я не смог найти никакой документации по этому поводу на веб-сайте medusajs .

1 ответ

Соавтор Медузы здесь.

Обычно мы советуем разработчикам не расширять основные схемы базы данных дополнительными столбцами, так как это может поставить под угрозу удобство сопровождения вашей установки. Поэтому мы не предоставляем собственный способ сделать это. Тем не менее, у нас есть планы добавить в ближайшем будущем API настраиваемых полей, который позволит вам эффективно расширять ваши схемы, но не напрямую. Скорее всего, это будет выполнено по схеме EAV.

Кроме того, похоже, вы могли перепутать новые объекты с дополнительными столбцами таблицы. Когда вы добавляете модели в, вы добавляете в базу данных новые таблицы , а не столбцы. Подробнее читайте здесь.

У меня нет опыта работы с Typeormфункциональность, поэтому я ничего не могу сказать о том, как это влияет на вашу настройку. Что я могу сказать, так это то, что в большинстве случаев мы запрашиваем набор полей и отношений по умолчанию для сущностей.конечные точки. Если вы явно не укажете свои дополнительные поля, они не будут частью ответа.

Что касается расширителя, вы действительно можете использовать его для расширения схем вашей базы данных, но, опять же, он имеет оговорку о потенциальной угрозе ремонтопригодности вашего экземпляра и будущих путей обновления.

Другие вопросы по тегам