0.0.1 • Published 3 years ago

knex-populate-plugin v0.0.1

Weekly downloads
4
License
ISC
Repository
github
Last release
3 years ago

Knex Populate Plugin

kpp is a kind of plugin to help you populate your data with data from other tables in your database.

See a very basic example: On your database there are two tables: customers and address

  • Table customers
idNameAgeAddressID
1Carol241
2Rychell271
3Ari201
4João184
5Maria213
6José244
  • Table address
idStreetNeighborhoodCityCountryZipCode
1Rua Oliveira SobrinhoBonsucessoFortalezaBrasil60541795
2Rua ACentroSão PauloBrasil1125346
3Rua CarvalhoCentroNiceFrança232651261
4Rua Sem saídaBJFortalezaBrasil613210321

If you need to populate your customers with data from address table you will need to do a few queries to get it done. Using kpp it's simple like this:

const knex = require('./database/connection') // this is your knex instance
const KnexPopulatePlugin = require('./../src/index')

const knexPopulate = new KnexPopulatePlugin(knex)

// First do the regular select to get all customers
const customers = await knex('customers').select()

// Then tell to kpp what you to populate and that's it
const customersPopulated = await knexPopulate
                                    .loadData(customers) // insert your the raw data
                                    .populate([ // Pass an array of settings
                                      {
                                        key: 'AddressID',
                                        searchOnTable: 'address',
                                        alias: 'Address'
                                      }
                                    ])
                                   .exec() // Finally execute all queries

Now customersPopulated content's looks like this and you can do whatever you want with this data.

[
  {
    "id": 1,
    "Name": "Carol",
    "Age": 24,
    "Address": {
      "id": 1,
      "Street": "Rua Oliveira Sobrinho",
      "Neighborhood": "Bonsucesso",
      "City": "Fortaleza",
      "Country": "Brasil",
      "ZipCode": "60541795"
    }
  },
  {
    "id": 2,
    "Name": "Rychell",
    "Age": 27,
    "Address": {
      "id": 1,
      "Street": "Rua Oliveira Sobrinho",
      "Neighborhood": "Bonsucesso",
      "City": "Fortaleza",
      "Country": "Brasil",
      "ZipCode": "60541795"
    }
  },
  {
    "id": 3,
    "Name": "Ari",
    "Age": 20,
    "Address": {
      "id": 1,
      "Street": "Rua Oliveira Sobrinho",
      "Neighborhood": "Bonsucesso",
      "City": "Fortaleza",
      "Country": "Brasil",
      "ZipCode": "60541795"
    }
  },
  {
    "id": 4,
    "Name": "João",
    "Age": 18,
    "Address": {
      "id": 4,
      "Street": "Rua Sem saída",
      "Neighborhood": "BJ",
      "City": "Fortaleza",
      "Country": "Brasil",
      "ZipCode": "613210321"
    }
  },
  {
    "id": 5,
    "Name": "Maria",
    "Age": 21,
    "Address": {
      "id": 3,
      "Street": "Rua Carvalho",
      "Neighborhood": "Centro",
      "City": "Nice",
      "Country": "França",
      "ZipCode": "232651261"
    }
  },
  {
    "id": 6,
    "Name": "José",
    "Age": 24,
    "Address": {
      "id": 4,
      "Street": "Rua Sem saída",
      "Neighborhood": "BJ",
      "City": "Fortaleza",
      "Country": "Brasil",
      "ZipCode": "613210321"
    }
  }
]
0.0.1

3 years ago