Încerc să creez o manytomany raport cu un domeniu personalizat în urma TypeORM de documentare. Îl puteți vedea în relația dintre societate, externalApp și ExternalAppCompanies. Dar, eu nu pot obține datele în mod corespunzător.
Mai jos este codul meu:
Compania.entitate.ts
import { ExternalApp } from 'src/modules/external/external-apps/entities/external-app.entity';
import { Group } from 'src/modules/group/entities/group.entity';
import { User } from 'src/modules/user/entities/user.entity';
import { justNumbers } from 'src/utils/utils';
import {
BeforeInsert,
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
JoinTable,
ManyToMany,
OneToMany,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
import { SharedEntityProps } from '../../../utils/sharedEntityProps';
import { ExternalAppCompanies } from '../../external/external-apps/entities/external-app-companies.entity';
export enum CompanyStatus {
ENABLED = 'ENABLED',
DISABLED = 'DISABLED',
}
@Entity({ name: 'companies' })
export class Company extends SharedEntityProps {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
type: 'enum',
enum: CompanyStatus,
default: CompanyStatus.ENABLED,
})
status: CompanyStatus;
@Column()
name: string;
@Column()
cnpj: string;
@Column()
razao_social: string;
@Column({ nullable: true })
email: string;
@Column({ nullable: true })
phone: string;
@Column()
address_street: string;
@Column()
address_number: string;
@Column()
address_zip_code: string;
@Column({ nullable: true })
address_cod_ibge: string;
@Column({ nullable: true })
address_city: string;
@Column({ nullable: true })
address_state: string;
@Column({ nullable: true })
address_country: string;
@Column({ default: '#005193' })
theme_primary: string;
@Column({ default: '#ec2027' })
theme_secondary: string;
@ManyToMany((type) => User, (user) => user.companies)
@JoinTable({ name: 'companies_users' })
users: User[];
@OneToMany(() => Group, (group) => group.company)
groups: Group[];
@OneToMany(() => ExternalAppCompanies, (app) => app.company)
external_app_companies: ExternalAppCompanies[];
@BeforeInsert()
private beforeInsert = () => {
//grava só com os números
this.cnpj = justNumbers(this.cnpj);
this.address_zip_code = justNumbers(this.address_zip_code);
this.phone = justNumbers(this.phone);
};
}
externalApps.entitate.ts
import { Company } from 'src/modules/company/entities/company.entity';
import {
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
JoinColumn,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
import { SharedEntityProps } from '../../../../utils/sharedEntityProps';
import { ExternalAppCompanies } from './external-app-companies.entity';
export enum ExternalAppStatus {
ENABLED = 'ENABLED',
DISABLED = 'DISABLED',
}
@Entity({ name: 'external_apps' })
export class ExternalApp extends SharedEntityProps {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@Column({
type: 'enum',
enum: ExternalAppStatus,
default: ExternalAppStatus.ENABLED,
})
status: ExternalAppStatus;
@Column()
description: string;
@Column({ default: '/external-apps/default.png' })
image: string;
@OneToMany(() => ExternalAppCompanies, (extComp) => extComp.externalApp)
companies: ExternalAppCompanies[];
}
externalAppCompanies.entitate.ts
import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { Company } from '../../../company/entities/company.entity';
import { ExternalApp } from './external-app.entity';
export enum ExternalAppCompaniesEnum {
ENABLED = 'ENABLED',
DISABLED = 'DISABLED',
NOT_CONFIGURED = 'NOT_CONFIGURED',
}
@Entity({ name: 'external_app_companies' })
export class ExternalAppCompanies {
@ManyToOne(() => Company, (company) => company.external_app_companies, { primary: true })
@JoinColumn({ name: 'company_id' })
company: Company;
@ManyToOne(() => ExternalApp, (extApp) => extApp.companies, { primary: true })
@JoinColumn({ name: 'external_app_id' })
externalApp: ExternalApp;
@Column({ type: 'enum', enum: ExternalAppCompaniesEnum, default: ExternalAppCompaniesEnum.NOT_CONFIGURED })
status: ExternalAppCompaniesEnum;
}
Când am să încercați să obțineți date folosind findOne astfel:
this.companyRepository.findOne({ where: { id: id }, relations: ['users', 'external_app_companies'] })
acesta este rezultatul:
"created_at": "2021-11-16T22:30:22.122Z",
"updated_at": "2021-11-17T13:30:36.192Z",
"deleted_at": null,
"id": "ad1c8047-54e0-4ac5-9f8d-d23e4e1a4491",
"status": "ENABLED",
"name": "Test",
"cnpj": "12341234",
"razao_social": "Test SA",
"email": "[email protected]",
"phone": "132132132",
"address_street": "Test Street",
"address_number": "1754",
"address_zip_code": "11234",
"address_cod_ibge": null,
"address_city": "São Paulo",
"address_state": "São Paulo",
"address_country": "Brazil",
"theme_primary": "#000000",
"theme_secondary": "#E6E6E6",
"users": [
{
"created_at": "2021-11-11T17:28:33.217Z",
"updated_at": "2021-11-11T17:28:33.217Z",
"deleted_at": null,
"id": "19573ba7-05b1-4d53-82ae-b3306cf9d9e1",
"name": "admin",
"status": "ENABLED",
"admin": true,
"email": "admin",
"user_totvs": null
}
],
"external_app_companies": [
{
"status": "NOT_CONFIGURED"
},
{
"status": "NOT_CONFIGURED"
},
{
"status": "NOT_CONFIGURED"
}
]
}
Verificați external_app_companies obiect, acesta nu este de a aduce datele din externalApp raport și aș dori pentru a obține toate datele din această entitate. Ma poate ajuta cineva va rog?