Skip to content

A wrapper for Knex.js that can output list of objects hydrated from a select

Notifications You must be signed in to change notification settings

CoursePark/KnexNest

Repository files navigation

KnexNest

Build Status Coverage Status

Takes a Knex.js select query object and hydarates a list of nested objects using the NestHydration npm module.

This can be simply accomplished without this library by doing

return knex.select(...)
	.then(NestHydrationJS.nest)
	.then(function (data) {
		...
	})
;

However Postgres limits column names to 63 characters and this becomes a problem when trying to nest objects several deep using NestHydration. A column name such as _activeUser_purchases__product_originalManufacturer_logoSmall_url would be too long and would cause nasty behavior. This module handles this problem by mapping long names to shorter ones and then returning them with a structPropToColumnMap object passed to NestHydration.

Example Usage

var Knex = require('knex');
var knexnest = require('knexnest');

var knex = Knex({
	client: 'postgres',
	connection: process.env.DATABASE_URL
});

var sql = knex
	.select(
		'c.id    AS _id',
		'c.title AS _title',
		't.id    AS _teacher_id',
		't.name  AS _teacher_name',
		'l.id    AS _lesson__id',
		'l.title AS _lesson__title'
	)
	.from('course AS c')
	.innerJoin('teacher AS t', 't.id', 'c.teacher_id')
	.innerJoin('course_lesson AS cl', 'cl.course_id', 'c.id')
	.innerJoin('lesson AS l', 'l.id', 'cl.lesson_id')
;
knexnest(sql).then(function (data) {
	result = data;
});
/* result should be like:
[
	{id: '1', title: 'Tabular to Objects', teacher: {id: '1', name: 'David'}, lesson: [
		{id: '1', title: 'Defintions'},
		{id: '2', title: 'Table Data'},
		{id: '3', title: 'Objects'}
	]},
	{id: '2', title: 'Column Names Define Structure', teacher: {id: '2', name: 'Chris'}, lesson: [
		{id: '4', title: 'Column Names'},
		{id: '2', title: 'Table Data'},
		{id: '3', title: 'Objects'}
	]},
	{id: '3', title: 'Object On Bottom', teacher: {id: '1', name: 'David'}, lesson: [
		{id: '5', title: 'Non Array Input'},
	]}
]
*/

Related Projects

About

A wrapper for Knex.js that can output list of objects hydrated from a select

Resources

Stars

Watchers

Forks

Packages

No packages published