如何在adminbro/adminjs中处理复合主键?

问题描述 投票:0回答:1
  • 我有3张桌子

账户

id 电子邮件 电子邮件_已验证 is_primary 密码 图片网址 社交帐户_id 用户名 创建于 更新于

用户

id 已启用 创建于 更新于

用户帐户

账户 ID 用户ID 创建于 更新于

正如您所注意到的,我的 user_accounts 表有一个复合主键(account_id、user_id),我如何在 adminbro/adminjs 上管理它?

我认为目前它会自动将其中之一作为主键

我的主要抱怨是我目前无法为此表创建任何记录

我的管理路线

import { sequelize } from '../../data/models';

import AdminBro from 'adminjs';
import AdminBroExpress from '@adminjs/express';
import AdminBroSequelize from '@adminjs/sequelize';

AdminBro.registerAdapter(AdminBroSequelize);
const adminBro = new AdminBro({
  rootPath: '/admin',
  resources: [
    {
      resource: sequelize.models.Account,
      options: {
        parent: {
          name: 'Database',
          icon: 'Api',
        },
        listProperties: [
          'id',
          'email',
          'emailVerified',
          'isPrimary',
          'password',
          'pictureUrl',
          'socialAccountId',
          'username',
        ],
      },
    },
    {
      resource: sequelize.models.User,
      options: {
        parent: {
          name: 'Database',
          icon: 'Api',
        },
        listProperties: ['id', 'enabled'],
      },
    },
    {
      resource: sequelize.models.UserAccount,
      options: {
        parent: {
          name: 'Database',
          icon: 'Api',
        },
        listProperties: ['id', 'accountId', 'userId'],
      },
    },
  ],
  branding: {
    companyName: 'API',
    logo: false,
    favicon: 'https://imagine.ai/img/favicon.ico',
    withMadeWithLove: false,
  },
});
const adminbroRouter = AdminBroExpress.buildRouter(adminBro);

export default adminbroRouter;

编辑1

UserAccount.model.ts

/* eslint import/no-cycle: "off" */
import { DataTypes } from 'sequelize';
import {
  Model,
  PrimaryKey,
  Column,
  Table,
  Default,
  IsUUID,
  ForeignKey,
} from 'sequelize-typescript';
import { Account, User } from 'data/models';

@Table({
  freezeTableName: true,
  tableName: 'user_accounts',
})
export default class UserAccount extends Model {
  @ForeignKey(() => Account)
  @PrimaryKey
  @IsUUID(4)
  @Default(DataTypes.UUIDV4)
  @Column
  accountId: string;

  @ForeignKey(() => User)
  @PrimaryKey
  @IsUUID(4)
  @Default(DataTypes.UUIDV4)
  @Column
  userId: string;
}
node.js sequelize.js admin-bro adminjs
1个回答
2
投票

根据 Rafał Dzięgielewski 的说法:

目前需要单个主键,这主要是因为 应用程序路由在 AdminJS 中如何工作。

AdminJS on Slack

© www.soinside.com 2019 - 2024. All rights reserved.