Así que tengo dos entidades Target y Contact que tienen una relación de muchos a muchos. ¿Cómo puedo filtrar el contacto en función de un objetivo en particular en typeorm.
export class Contact { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() contactno: string; @Column() email: string; @ManyToMany( () => Target, target => target.contacts ) @JoinTable() targets: Target[]; } export class Target { @PrimaryGeneratedColumn() id: number; @Column() name: string; @ManyToMany( () => Contact, contact => contact.targets, { cascade: true } )}
Ahora estoy buscando usando el siguiente queryBuilder
this.contactRepository .createQueryBuilder("contact") .select(["contact"]) .leftJoinAndSelect("contact.targets", "target") .where("contact.targets= :targets", {targets: "4"}) .getMany();Pero esto está produciendo un
QueryFailedError: column contact.contactId does not exist at new QueryFailedError (/home/niel_99/Internship/wf/src/api/node_modules/typeorm/error/QueryFailedError.js:11:28) at Query.callback (/home/niel_99/Internship/wf/src/api/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:176:38) at Query.handleError (/home/niel_99/Internship/wf/src/api/node_modules/pg/lib/query.js:146:19) at Connection.connectedErrorMessageHandler (/home/niel_99/Internship/wf/src/api/node_modules/pg/lib/client.js:233:17) at Connection.emit (events.js:310:20) at /home/niel_99/Internship/wf/src/api/node_modules/pg/lib/connection.js:109:10 at Parser.parse (/home/niel_99/Internship/wf/src/api/node_modules/pg-protocol/dist/parser.js:42:17) at Socket.<anonymous> (/home/niel_99/Internship/wf/src/api/node_modules/pg-protocol/dist/index.js:8:42) at Socket.emit (events.js:310:20) at addChunk (_stream_readable.js:286:12) at readableAddChunk (_stream_readable.js:268:9) at Socket.Readable.push (_stream_readable.js:209:10) at TCP.onStreamRead (internal/stream_base_commons.js:186:23)Tengo una tabla de contactos, una tabla de destino y una tabla contact_targets_target en mi base de datos, donde contact_targets_target almacena contactId contra targetId
en mi caso no usé querybuilder, pero puedes probar .find o .findandcount exemple:
let res = await this.userRepository.findAndCount({ relations: ["roles", "company"],//this for the relation many-to-many where: `(username like '%${seachValue}%' or firstname like '%${seachValue}%' or lastname like '%${seachValue}%' or email like '%${seachValue}%')`, order: { username: sortDirection, }, skip: pageNumber * listeNumber, take: listeNumber, });