Skip to content

Commit

Permalink
refactor: model query builder subqueries can now access the parent model
Browse files Browse the repository at this point in the history
  • Loading branch information
thetutlage committed Sep 23, 2019
1 parent a72283a commit 9bc3bf1
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 17 deletions.
2 changes: 1 addition & 1 deletion adonis-typings/orm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ declare module '@ioc:Adonis/Lucid/Orm' {
export interface ModelQueryBuilderContract<
Model extends ModelConstructorContract,
> extends ChainableContract<Model['refs']> {
model?: Model,
model: Model,

/**
* Execute and get first result
Expand Down
2 changes: 1 addition & 1 deletion example/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ class User extends BaseModel {
}

const user = User.query().then((a) => {
a.username.toLocaleLowerCase()
a[0].username.toLocaleLowerCase()
})
console.log(user)
21 changes: 6 additions & 15 deletions src/Orm/QueryBuilder/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,9 @@ import {
} from '@ioc:Adonis/Lucid/Orm'

import { QueryClientContract } from '@ioc:Adonis/Lucid/Database'
import { QueryCallback } from '@ioc:Adonis/Lucid/DatabaseQueryBuilder'

import { Chainable } from '../../Database/QueryBuilder/Chainable'
import { Executable, ExecutableConstructor } from '../../Database/Traits/Executable'

/**
* Wrapping the user function for a query callback and give them
* a new instance of the `DatabaseQueryBuilder` and not
* knex.QueryBuilder
*/
function queryCallback (userFn: QueryCallback<ModelQueryBuilderContract<ModelConstructorContract>>) {
return (builder: knex.QueryBuilder) => {
userFn(new ModelQueryBuilder(builder))
}
}

/**
* Database query builder exposes the API to construct and run queries for selecting,
* updating and deleting records.
Expand All @@ -45,10 +32,14 @@ export class ModelQueryBuilder extends Chainable implements ModelQueryBuilderCon
> {
constructor (
builder: knex.QueryBuilder,
public model?: ModelConstructorContract,
public model: ModelConstructorContract,
public client?: QueryClientContract,
) {
super(builder, queryCallback)
super(builder, (userFn) => {
return (builder) => {
userFn(new ModelQueryBuilder(builder, this.model))
}
})
}

/**
Expand Down

0 comments on commit 9bc3bf1

Please sign in to comment.