diff --git a/src/orm/base_model/index.ts b/src/orm/base_model/index.ts index 7e415ad52..75fdf5112 100644 --- a/src/orm/base_model/index.ts +++ b/src/orm/base_model/index.ts @@ -1707,7 +1707,7 @@ class BaseModelImpl implements LucidRow { */ const value = typeof attribute.consume === 'function' - ? attribute.consume(adapterResult[key], attributeName, this) + ? attribute.consume(adapterResult[key], attributeName, this, adapterResult) : adapterResult[key] /** diff --git a/src/types/model.ts b/src/types/model.ts index 7fa21e488..9aafcc115 100644 --- a/src/types/model.ts +++ b/src/types/model.ts @@ -222,7 +222,7 @@ export type ColumnOptions = { /** * Invoked when row is fetched from the database */ - consume?: (value: any, attribute: string, model: LucidRow) => any + consume?: (value: any, attribute: string, model: LucidRow, adapterResult: ModelObject) => any } /** diff --git a/test/orm/base_model.spec.ts b/test/orm/base_model.spec.ts index d0aeaf2fd..cfe34fbae 100644 --- a/test/orm/base_model.spec.ts +++ b/test/orm/base_model.spec.ts @@ -1817,18 +1817,25 @@ test.group('Base Model | create from adapter results', (group) => { declare username: string @column({ - consume: (value) => value.toUpperCase(), + consume: (value, attribute, instance, adapterResult) => + `${value.toUpperCase()} ${attribute} ${instance.constructor.name.toString()} ${adapterResult.username}`, }) declare fullName: string } - const user = User.$createFromAdapterResult({ full_name: 'virk' }) + const user = User.$createFromAdapterResult({ full_name: 'Harminder Virk', username: 'virk' }) assert.isTrue(user!.$isPersisted) assert.isFalse(user!.$isDirty) assert.isFalse(user!.$isLocal) - assert.deepEqual(user!.$attributes, { fullName: 'VIRK' }) - assert.deepEqual(user!.$original, { fullName: 'VIRK' }) + assert.deepEqual(user!.$attributes, { + fullName: 'HARMINDER VIRK fullName User virk', + username: 'virk', + }) + assert.deepEqual(user!.$original, { + fullName: 'HARMINDER VIRK fullName User virk', + username: 'virk', + }) }) test('original and attributes should not be shared', async ({ fs, assert }) => {