Module
@adminjs/typeorm
Database adapter which integrates TypeORM into adminjs
installation
yarn add @adminjs/typeorm
Usage
The plugin can be registered using standard AdminJS.registerAdapter
method.
import { Database, Resource } from '@adminjs/typeorm';
import AdminJS from 'adminjs'
AdminJS.registerAdapter(TypeOrmAdapter);
//...
if you use class-validator you have to inject this to resource:
import { validate } from 'class-validator'
//...
Resource.validate = validate;
Example
Let see the entire working example of one file typeorm application running on express server:
import {
BaseEntity,
Entity, PrimaryGeneratedColumn, Column,
createConnection,
ManyToOne,
RelationId
} from 'typeorm';
import * as express from 'express';
import { Database, Resource } from '@adminjs/typeorm';
import { validate } from 'class-validator'
import AdminJS from 'adminjs';
import * as AdminJSExpress from '@adminjs/express'
Resource.validate = validate;
AdminJS.registerAdapter({ Database, Resource });
@Entity()
export class Person extends BaseEntity
{
@PrimaryGeneratedColumn()
public id: number;
@Column({type: 'varchar'})
public firstName: string;
@Column({type: 'varchar'})
public lastName: string;
@ManyToOne(type => CarDealer, carDealer => carDealer.cars)
organization: Organization;
// in order be able to fetch resources in adminjs - we have to have id available
@RelationId((person: Person) => person.organization)
organizationId: number;
}
( async () =>
{
const connection = await createConnection({...});
// Applying connection to model
Person.useConnection(connection);
const adminJs = new AdminJS({
// databases: [connection],
resources: [
{ resource: Person, options: { parent: { name: 'foobar' } } }
],
rootPath: '/admin',
});
const app = express();
const router = AdminJSExpress.buildRouter(adminJs);
app.use(adminJs.options.rootPath, router);
app.listen(3000);
})();
ManyToOne
Admin supports ManyToOne relationship but you also have to define @RealationId as stated in the example above.
So 2 properties are needed:
@ManyToOne(type => CarDealer, carDealer => carDealer.cars)
organization: Organization;
and, because TypeORM doesn't publish raw IDs of references, the relation id is also needed:
@RelationId((person: Person) => person.organization)
organizationId: number;
in our case external ID was is a number.