A Knex plugin for batch loading table relations.
MIT License
A Knex plugin for batch loading table relations.
.withRelations
method was changed to .withHasManyRelation
.
whereIn
clause to filter relations, which should be good for performance in the most of situationsyarn add knex-with-relations
import 'knex-with-relations'
import createKnex from 'knex'
export const knex = createKnex(dbConfig)
And you are ready to go.
.withHasManyRelation
knex('users').withHasManyRelation(knex('posts'), 'id', 'user_id').then(console.log)
// Result
{
id: 1,
posts: [
{
id: 1,
title: 'post 1',
user_id: 1,
},
],
}
.withHasOneRelation
knex('users').withHasOneRelation(knex('posts'), 'id', 'user_id').then(console.log)
// Result
{
id: 1,
posts: {
id: 1,
title: 'post 1',
user_id: 1,
},
}
You can also specify the attribute name. If not specified, it uses table name.
knex('users')
.where({ id: 1 })
.withHasOneRelation(
knex('posts').orderBy('created_at', 'DESC').limit(1),
'id',
'user_id',
{ as: 'latest_post' } // <--- This renames the attribute name to `latest_post`. If no provided, it become `posts`.
)
.then(console.log)
// Result
{
id: 1,
latest_post: {
id: 1,
title: 'post 1',
user_id: 1,
created_at: 'Wed Feb 22 05:23:47 PM JST 2023',
},
}
infer
, but no luck. If you are enough knowledge to implement it, please send a PR. Thanks.