loopback-save-relation-mixin

A mixin to automatically save related Models

Usage no npm install needed!

<script type="module">
  import loopbackSaveRelationMixin from 'https://cdn.skypack.dev/loopback-save-relation-mixin';
</script>

README

Loopback save relation mixin

What does this do?

It provides a way to save related models when creating records.

For example if the model ApplicationUser hasOne Profile you will be able to send:

PATCH /api/ApplicationUsers

{ 
  "email": "user1@gmail.com",
  "password": "123456",
  "profile": {
    "name": "user 1"
  } 
}

How does this work?

First you must install this package through npm

$ npm install loopback-save-relation-mixin --save

Then you have to configure the file model-config.json to load the mixin.

"mixins": [
  ...
  "../node_modules/loopback-save-relation-mixin",
  ...]

And finally you can configure your model so it enables saving a related model.

{
  "name": "ApplicationUser",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": false
  },
  "mixins": {
    "SaveRelation": {
      "relations": ["profile", "orders", "projects", "tickets"]
    }
  },
  "relations": {
    "profile": {
      "type": "hasOne",
      "model": "Profile",
      "foreignKey": "userId"
    },
    "orders": {
      "type": "hasMany",
      "model": "Order",
      "foreignKey": "userId"
    },
    "projects": {
      "type": "hasMany",
      "model": "Project",
      "foreignKey": "userId",
      "through": "UserProject"
    },
    "tickets": {
      "type": "hasAndBelongsToMany",
      "model": "Ticket"
    }
  }
}

It works for:

  the loopback saveRelation mixin
    given a hasOne relation type
      ✓ should be saved
      ✓ should be updated
      ✓ should be deletable by sending an empty object
      ✓ should be deletable by sending null
    given a hasMany relation type
      ✓ should be saved
      ✓ should be updated
      ✓ should able to remove one relatedObject
      ✓ should able to remove all the relatedObjects by sending null
      ✓ should able to remove all the relatedObjects by sending an empty array
      ✓ should be updatable and deletable in the same operation
    given a hasManyThrough relation type
      ✓ should create the relatedObjects if they do not exist in the database and save the relations
      ✓ should be saved if the related objects do exist in the database
      ✓ should be deletable
    given a hasAndBelongsToMany relation type
      ✓ should create the relatedObjects if they do not exist in the database and save the relations
      ✓ should be saved if the related objects do exist in the database
      ✓ should be deletable