Ошибка в Prisma: Неизвестный аргумент project_code в вызове prisma.etl_users_project.create(), Как решить эту проблему.

Вопрос или проблема

Я столкнулся с ошибкой при тестировании моего API в Postman. Ошибка возникает, когда я пытаюсь создать новую запись в таблице etl_users_project с использованием Prisma. Вот фрагмент кода и сообщение об ошибке:

Неверный вызов `prisma.etl_users_project.create()`:

{
  data: {
    user_name: "Arun",
    project_code: "BIS",
    ~~~~~~~~~~~~
    etl_projects: {
      connect: {
        project_code: "BIS"
      }
    },
    etl_user_master: {
      connect: {
        id: 10
      }
    },
?   crt_dtm?: DateTime | Null,
?   crt_user_id?: String | Null,
?   updt_dtm?: DateTime | Null,
?   updt_user_id?: String | Null
  }
}

Неизвестный аргумент `project_code`. Доступные параметры отмечены ?.
    at Dn (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:114:8082) 
    at Mn.handleRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7396)
    at Mn.handleAndLogRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7061)
    at Mn.request (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:6745)
    at async l (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:130:9633)
    at async saveUserProject (file:///C:/Users/mendrev/Downloads/BISWebAppZip/BISWeb/Backend/controllers/etl_UserProjectNew.js:32:32) {
  clientVersion: '5.21.1'
}

Что я пробовал:
Проверил, что project_code правильно определен в схеме Prisma.
Проверил отношения и соединения в схеме.
Убедился, что клиент Prisma обновлен.
Фрагмент схемы:
Вот соответствующая часть моей схемы Prisma:
Схема Prisma:

model etl_user_master {
  id                Int                @id @default(autoincrement())
  network_id        String             @db.VarChar(50)
  name              String             @db.VarChar(100)
  email             String             @unique @db.VarChar(100)
  enabled           Boolean?           @default(true)
  etl_users_project etl_users_project?
}

model etl_projects {
  project_code          String              @id @db.VarChar(100)
  project_name          String              @db.VarChar(100)
  owner                 String?             @db.VarChar(100)
  owner_email           String?             @db.VarChar(100)
  secondaryOwner        String?             @db.VarChar(100)
  secondary_owner_email String?             @db.VarChar(100)
  start_date            DateTime?           @db.Date
  enable                Boolean?
  crt_dtm               DateTime?           @db.Timestamp(6)
  crt_user_id           String?             @db.VarChar(20)
  updt_dtm              DateTime?           @db.Timestamp(6)
  updt_user_id          String?             @db.VarChar(20)
  etl_users_project     etl_users_project[]
}

model etl_users_project {
  uid             Int             @id @default(autoincrement())
  user_name       String          @db.VarChar(100)
  project_code    String          @db.VarChar(100)
  crt_dtm         DateTime?       @db.Timestamp(6)
  crt_user_id     String?         @db.VarChar(20)
  updt_dtm        DateTime?       @db.Timestamp(6)
  updt_user_id    String?         @db.VarChar(20)
  etl_projects    etl_projects    @relation(fields: [project_code], references: [project_code], onDelete: NoAction, onUpdate: NoAction, map: "fk_project_code")
  etl_user_master etl_user_master @relation(fields: [uid], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fk_user_id")
}

Почему я получаю эту ошибку и как я могу ее исправить? Любая помощь будет весьма признательна
Мой код на React Js Backend:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

// Сохранить пользователя и код проекта
const saveUserProject = async (req, res) => {
    const { user_name, project_code } = req.body;
    try {
        if (!user_name || !project_code) {
            return res.status(400).json({ msg: 'Обязательные поля: имя пользователя и код проекта' });
        }

        // Найти пользователя по имени
        const user = await prisma.etl_user_master.findFirst({
            where: { name: user_name }
        });

        if (!user) {
            return res.status(404).json({ msg: 'Пользователь не найден' });
        }

        // Убедиться, что проект существует
        const project = await prisma.etl_projects.findUnique({
            where: { project_code: project_code }
        });

        if (!project) {
            return res.status(404).json({ msg: 'Проект не найден' });
        }

        // Создать проект пользователя
        const newUserProject = await prisma.etl_users_project.create({
            data: {
                user_name: user_name,
                project_code: project_code,
                etl_projects: {
                    connect: { project_code: project_code }
                },
                etl_user_master: {
                    connect: { id: user.id }
                }
            }
        });
        res.json({ status: 'success', data: newUserProject });
    } catch (error) {
        console.error(error);
        res.status(500).json({ msg: 'Внутренняя ошибка сервера' });
    }
};

export {
   saveUserProject,

};

Ответ или решение

Ошибка в Prisma: Неизвестный аргумент project_code в вызове prisma.etl_users_project.create()

При разработке и тестировании API с использованием Prisma вы можете столкнуться с ошибками, связанными с несовпадением полей или аргументов. В вашем случае ошибка Unknown argument project_code in prisma.etl_users_project.create() указывает на то, что аргумент project_code не распознается в методе prisma.etl_users_project.create(). Давайте подробно разберем, как решить эту проблему.

Анализ проблемы

Из вашего описания видно, что вы пытаетесь создать новую запись в таблице etl_users_project с помощью следующего фрагмента кода:

const newUserProject = await prisma.etl_users_project.create({
    data: {
        user_name: user_name,
        project_code: project_code, // Вызывает ошибку
        etl_projects: {
            connect: { project_code: project_code }
        },
        etl_user_master: {
            connect: { id: user.id }
        }
    }
});

Ошибка указывает на то, что в модели etl_users_project аргумент project_code не может быть напрямую указан в data. Это происходит из-за того, что project_code уже связан с моделью etl_projects через поле etl_projects и не требуется для создания новой записи в etl_users_project.

Решение проблемы

Чтобы исправить эту ошибку, вам нужно удалить project_code из объекта data в вызове prisma.etl_users_project.create(). Вместо этого используйте только поля, которые разрешены в модели etl_users_project.

Ваша исправленная версия кода будет выглядеть следующим образом:

const newUserProject = await prisma.etl_users_project.create({
    data: {
        user_name: user_name,
        etl_projects: {
            connect: { project_code: project_code }
        },
        etl_user_master: {
            connect: { id: user.id }
        }
    }
});

Таким образом, вы исключили аргумент project_code, что должно устранить проблему.

Дополнительные рекомендации

  1. Проверка схемы: Убедитесь, что ваша Prisma схема правильно спроектирована. На данный момент поле project_code не должно напрямую присутствовать в etl_users_project, если вы планируете использовать связи с другими моделями.

  2. Обновление и миграции: Если вы изменяли схему, не забудьте запустить команды prisma migrate dev или prisma generate для обновления вашей базы данных и пересоздания Prisma Client.

  3. Отладка: Если ошибка повторяется, добавьте отладочные оператор, чтобы просмотреть значение req.body. Это поможет проверить, действительно ли вы передаете все необходимые данные.

  4. Документация Prisma: В случае возникновения другой ошибки обратитесь к документации Prisma, которая содержит обширный раздел по работе с моделями и их связями.

Заключение

С устранением аргумента project_code из вызова prisma.etl_users_project.create() ваша проблема должна быть решена. Следуя приведенным рекомендациям и исправлениям, вы сможете эффективно работать с Prisma и продолжить дальнейшую разработку вашего API.

Оцените материал
Добавить комментарий

Капча загружается...