Я столкнулся с проблемой при попытке заполнить таблицу пользователей.
У меня есть отношение один к одному между моделью User и UserSettings.
async function generateUsers() {
const users = [];
for (let i = 0; i < randomUsersCount; i++) {
users[i] = {
first_name: faker.name.firstName(),
last_name: faker.name.lastName(),
email: faker.internet.email(),
password: await hashPassword('testtest'),
phone: faker.phone.phoneNumber('###-###-###'),
role: 'USER',
is_blocked: false,
user_settings : {
create: {
language: 'PL',
color: faker.internet.color(),
}
}
};
}
await prisma.user.createMany({
data: users,
});
}
Сообщение об ошибке:
Unknown arg `user_settings` in data.0.user_settings for type UserCreateManyInput. Available args:
type UserCreateManyInput {
id?: Int
first_name: String
last_name: String
email: String
phone: String
password: String
role: UserRoles
is_blocked?: Boolean
created_at?: DateTime
updated_at?: DateTime
}
но в моей модели поле существует:
model User {
id Int @id @default(autoincrement())
first_name String
last_name String
email String @unique
phone String
password String
role UserRoles
is_blocked Boolean @default(false)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
user_settings UserSettings?
}
model UserSettings {
id Int @id @default(autoincrement())
language Languages
color String
user_id Int
user User @relation(fields: [user_id], references: [id])
}
Когда я включаю Prisma Studio, я вижу столбец, присутствующий в таблице.
Где я ошибся?
Я бегал npx prisma generate
и npx prisma migrate
и даже npx prisma migrate reset
много раз, но безуспешно.
@FabioZapata Я только что попробовал, к сожалению, без изменений, все та же ошибка
Вы пытаетесь использовать неподдерживаемый метод Nest createMany. Это из документация:
You cannot create or connect relations - you cannot nest create, createMany, connect, connectOrCreate inside a top-level createMany
В качестве альтернативы я бы предложил создавать пользователей внутри цикла, пока вы создаете данные.
async function generateUsers() {
const users = [];
for (let i = 0; i < randomUsersCount; i++) {
users[i] = {
first_name: faker.name.firstName(),
last_name: faker.name.lastName(),
email: faker.internet.email(),
password: await hashPassword('testtest'),
phone: faker.phone.phoneNumber('###-###-###'),
role: 'USER',
is_blocked: false,
user_settings : {
create: {
language: 'PL',
color: faker.internet.color(),
}
}
};
await prisma.user.create({
data: users[i],
});
}
}
Действительно, документация упоминает об этом, спасибо, что напомнили мне об этом. Я хотел избежать простого выполнения нескольких запросов в пользу множественной вставки из соображений производительности. Спасибо за помощь, проблема решена!
Вы пытались удалить свойство create и передать напрямую свойство языка и цвета?