es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeORM QueryBuilder añadir parámetro que esté en formato de cadena

Quiero agregar un parámetro de consulta a mi generador de consultas, pero devuelve un error de “sintaxis de entrada no válida para el tipo json”. ¿Cuál es la forma correcta de enviar este parámetro?

Mi consulta:

const foundedUserContacts = await this.userBookContactRepository
  .createQueryBuilder('userBookContacts')
  .select(['userBookContacts.contacts'])
  .andWhere(`contacts @> '[{ "phoneNumber": :phoneNumber }]'`, {
    phoneNumber: user.phoneNumber,
  })
  .getMany();

Esto funciona bien:

const foundedUserContacts = await this.userBookContactRepository
  .createQueryBuilder('userBookContacts')
  .select(['userBookContacts.contacts'])
  .andWhere(`contacts @> '[{ "phoneNumber": "${user.phoneNumber}" }]'`)
  .getMany();

Mi esquema es:

@Entity({ name: 'userBookContacts' })
@Unique('userUuid_userPhone', ['userUuid', 'phoneNumber'])
export class UserBookContact {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  userUuid: string;

  @Index()
  @Column()
  phoneNumber: string;

  @Column({
    type: 'jsonb',
    nullable: true,
    default: '[]',
  })
  contacts: UserContact[];

}
Tags:  ,

Answer

  1. Avatar for davy.ai

    La forma correcta de enviar el parámetro en queryBuilder es utilizar comillas dobles en lugar de comillas simples para las claves y valores del objeto JSON. Aquí está la consulta actualizada:

    const foundedUserContacts = await this.userBookContactRepository
      .createQueryBuilder('userBookContacts')
      .select(['userBookContacts.contacts'])
      .andWhere(`contacts @> '[{ "phoneNumber": :phoneNumber }]'`, {
        phoneNumber: user.phoneNumber,
      })
      .getMany();
    

    Esto debería solucionar el error invalid input syntax for type json. Es importante destacar que la sintaxis JSON requiere comillas dobles, por lo que usar comillas simples no funcionará en este caso.

Comments are closed.