Вопрос или проблема
Prisma выпустила версию 5.15.0, в которой добавлена предварительная функция prismaSchemaFolder. Однако предварительные функции в Prisma — это новые функции, которые еще не считаются готовыми к производству. Они выпускаются для сбора отзывов от пользователей и чтобы дать пользователям возможность протестировать их, прежде чем они станут общедоступными. Эти функции обычно стабильны, но могут все еще иметь незначительные ошибки, и пользователям предлагается предоставить отзывы, чтобы помочь их улучшить. Существует ли какой-либо способ разделить схему prisma на несколько файлов и объединить их в один файл?
Я пробовал prismix, но я узнал, что мне нужно добавлять пустую модель всякий раз, когда я хочу связать эту модель с другой.
model Posts {
id Int @id @default(autoincrement())
title String
content String
account_id Int
account Account @relation(fields: [account_id], references: [id])
@@map("posts")
}
model Account {
id String
posts Post[]
}
Здесь аккаунт находится в другом файле, но его нужно переопределить, чтобы создать связь с постами.
Ответ или решение
Да, действительно, в Prisma 5.15.0 появилась возможность использовать функционал prismaSchemaFolder
, что позволяет разделить схему Prisma на несколько файлов. Однако, как вы правильно отметили, это еще находится на этапе предварительного просмотра, и пользователи должны быть готовы к возможным недостаткам в стабильности.
В дополнение к использованию prismaSchemaFolder
, вы можете воспользоваться некоторыми другими методами для организации вашей схемы. Вот несколько шагов, которые помогут вам структурировать вашу Prisma схему более удобно:
-
Создание отдельных файлов для моделей:
Создайте отдельные файлы для каждой модели, например,Post.prisma
,Account.prisma
и так далее. Каждый файл будет содержать определение конкретной модели.// Post.prisma model Post { id Int @id @default(autoincrement()) title String content String account_id Int account Account @relation(fields: [account_id], references: [id]) @@map("posts") }
// Account.prisma model Account { id String posts Post[] }
-
Интеграция моделей:
Вам необходимо создать файл, который будет собирать все эти модели и объединять их в одну схему. Называйте его, например,schema.prisma
. В этом файле вы можете импортировать все ваши модели.// schema.prisma datasource db { provider = "postgresql" // или другой используемый вами провайдер url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } // Подключение моделей из других файлов // Здесь должен быть ваш код для импорта, который зависит от вашего окружения или инструментария
-
Использование Prisma CLI:
С помощью Prisma CLI вы можете собрать и скомпилировать схему в одну.Запустите команду
prisma generate
, чтобы сгенерировать Prisma Client на основе вашей собранной схемы. -
Замечания о зависимостях:
Как вы упомянули, при использовании внешних файлов есть необходимость повторно определять некоторую информацию о моделях для установления отношений между ними. Это действительно требует дополнительной активации, и в текущей версии Prisma это неизбежно. Чтобы обойти это, можно использовать подходы, такие как создание базовых типов данных или использование описаний, чтобы минимизировать дублирование.
Использование данной структуры поможет вам поддерживать код более организованным и лучше управляемым. Несмотря на существующие недостатки, такие как необходимость в повторном определении моделей для правильной работы отношений, подобный подход увеличивает модульность вашего проекта.
Если у вас возникнут вопросы по настройке или более сложные сценарии, обратитесь к документации Prisma или сообществу для получения более специализированных решений.