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[];
}
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:
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.