typescript - Hur man lägger till ett anpassat fält till en befintlig entitet i MedusaJS


Jag skulle vilja lägga till ett eget fält (namngett description) till ProductCollection-entiteten i MedusaJS serverapplikation. Hittills har jag följt detta:

  • skapade en ny fil under src/models-mappen, som är myCollection.ts med följande innehåll
import { Column, Entity } from "typeorm";
import { ProductCollection } from "@medusajs/medusa";

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

  • skapade en migration med detta kommando: npx typeorm migration:create -n DescriptionAdded --dir src/migrations och det ger mig en ny fil under mappen src/migrations med namnet 1674744755671-DescriptionAdded.ts och jag redigerade filen så här:
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");
  }
}

Sedan kör jag migreringen med detta kommando medusa migrations run. Och som jag förväntade mig, skapade det fältet i databastabellen. Sedan byggde jag medusa-applikationen med detta kommando yarn run build. Och jag startade om applikationen med yarn run start. Jag använder den senaste medusajs-serverapplikationen med det senaste medusa-paketet som är 1.7.5.

Det jag förväntade mig är att få detta fält när jag anropar följande API:

http://localhost:9000/store/collections

Jag har skapat medusajs-serverappen med dessa kommandon:

yarn global add @medusajs/medusa-cli
medusa new my-medusa-store --seed

Jag kör Medusa-serverappen lokalt och den ger inte det nya fältet med namnet description.

Jag kunde inte hitta hur man lägger till ett anpassat fält i Medusa-serverapplikationen. Vad är sättet att utöka befintliga enheter i Medusajs serverapplikation? Jag har sett medusa-extender-förrådet men det visar inget exempel på hur man gör det.

Jag hoppas att du kan hjälpa mig.

Tack

Jag har installerat medusa serverapp med hjälp av medusa/cli och lagt till filer som beskrivs ovan. Jag kunde inte hitta någon dokumentation om detta på Medusajs webbplats.

Svar #1

Medförfattare till Medusa här.

Vi råder generellt utvecklare att inte utöka de grundläggande databasscheman med ytterligare kolumner, eftersom det kan kompromettera underhållbarheten av din setup. Därför exponerar vi inte ett inbyggt sätt att göra det. Vi har dock planer på att lägga till ett API för anpassade fält inom en snar framtid, vilket effektivt skulle tillåta dig att utöka dina scheman, men inte direkt. Det kommer sannolikt att genomföras enligt ett EAV-mönster.

Det verkar också som att du kan ha förväxlat nya entiteter med ytterligare tabellkolumner. När du lägger till modeller i /src/models lägger du till nya tabeller i din databas - inte kolumner. Läs mer här.

Jag har ingen erfarenhet av Typeorms addColumn-funktionalitet, så jag kan inte säga något om hur det påverkar din setup. Vad jag kan säga är att vi hämtar en uppsättning standardfält och relationer på enheter i de flesta GET /store/*-endpoints. Om du inte uttryckligen anger dina ytterligare fält, kommer de inte att ingå i svaret.

När det gäller förlängaren kan du faktiskt använda den för att utöka dina databasscheman, men återigen kommer det med varningen om att det potentiellt kan kompromettera underhållbarheten för din instans och framtida uppgraderingsvägar.

Relaterade artiklar