From bf77cec7e9e7db4988e481d464178636203fca32 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Fri, 17 May 2024 14:07:57 -0400 Subject: [PATCH] fix(db-postgres): query with like on id columns (#6416) copy of https://github.com/payloadcms/payload/pull/6414 to main --- .../db-postgres/src/queries/parseParams.ts | 9 ++++++++- test/collections-rest/int.spec.ts | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/db-postgres/src/queries/parseParams.ts b/packages/db-postgres/src/queries/parseParams.ts index 570c9c5caf..f6b1622b4b 100644 --- a/packages/db-postgres/src/queries/parseParams.ts +++ b/packages/db-postgres/src/queries/parseParams.ts @@ -71,7 +71,7 @@ export async function parseParams({ // So we need to loop on keys again here to handle each operator independently const pathOperators = where[relationOrPath] if (typeof pathOperators === 'object') { - for (const operator of Object.keys(pathOperators)) { + for (let operator of Object.keys(pathOperators)) { if (validOperators.includes(operator as Operator)) { const val = where[relationOrPath][operator] const { @@ -157,6 +157,13 @@ export async function parseParams({ break } + if ( + operator === 'like' && + (field.type === 'number' || table[columnName].columnType === 'PgUUID') + ) { + operator = 'equals' + } + if (operator === 'like') { constraints.push( and(...val.split(' ').map((word) => ilike(table[columnName], `%${word}%`))), diff --git a/test/collections-rest/int.spec.ts b/test/collections-rest/int.spec.ts index 1e21f7a594..8398a1c51c 100644 --- a/test/collections-rest/int.spec.ts +++ b/test/collections-rest/int.spec.ts @@ -513,6 +513,26 @@ describe('collections-rest', () => { expect(result.docs).toEqual([post]) expect(result.totalDocs).toEqual(1) }) + + it('should query LIKE by ID', async () => { + const post = await payload.create({ + collection: slug, + data: { + title: 'find me buddy', + }, + }) + + const { result, status } = await client.find({ + query: { + id: { + like: post.id, + }, + }, + }) + + expect(status).toStrictEqual(200) + expect(result.totalDocs).toStrictEqual(1) + }) }) it('should query nested relationship - hasMany', async () => {