JSPM

gh-adonis-lucid-polymorphic

1.0.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3
  • Score
    100M100P100Q14759F
  • License MIT

Adonis Lucid ^4.1.0 Polymorphic Relations Support.

Package Exports

  • gh-adonis-lucid-polymorphic

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (gh-adonis-lucid-polymorphic) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Adonis Lucid Polymorphic

Build Status Coverage Status

Polymorphic Relations support for Adonis Lucid ^4.1.0.

Installation

  1. Add package:
$ npm i adonis-lucid-polymorphic --save

or

$ yarn add adonis-lucid-polymorphic
  1. Register providers inside the your bootstrap/app.js file.
const providers = [
  ...
  'adonis-lucid-polymorphic/providers/PolymorphicProvider',
  ...
]

Examples

Table Structure

posts
    id - integer
    title - string
    body - text

videos
    id - integer
    title - string
    url - string

comments
    id - integer
    body - text
    commentable_id - integer
    commentable_type - string

Model Structure

// App/Model/Post
'use strict'

const Model = use('Lucid')

class Post extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  comments () {
    return this.morphMany('App/Models/Comment', 'id', 'commentable_id', 'commentable_type')
  }
}

module.exports = Post
// App/Model/Video
'use strict'

const Model = use('Lucid')

class Video extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  comments () {
    return this.morphMany('App/Models/Comment', 'id', 'commentable_id', 'commentable_type')
  }
}

module.exports = Video
// App/Model/Comment
'use strict'

const Model = use('Lucid')

class Comment extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  commentable () {
    return this.morphTo([
      'App/Models/Post', 'App/Models/Video'
    ], 'id', 'id', 'commentable_id', 'commentable_type')
  }
}

module.exports = Video

API

morphTo(relatedModels, [primaryKey], [relatedPrimaryKey], [morphIdKey], [morphTypeKey])

...

class Comment extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  commentable () {
    return this.morphTo([
      'App/Models/Post', 'App/Models/Video'
    ], 'id', 'id', 'commentable_id', 'commentable_type')
  }
}

...

morphMany(relatedModel, [primaryKey], [morphIdKey], [morphTypeKey])

...

class Post extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  comments () {
    return this.morphMany('App/Models/Comment', 'id', 'commentable_id', 'commentable_type')
  }
}

...

morphOne(relatedModel, [primaryKey], [morphIdKey], [morphTypeKey])

...

class Publication extends Model {
  static get traits () {
    return ['@provider:Morphable']
  }

  content () {
    return this.morphOne('App/Models/Content', 'id', 'contentable_id', 'contentable_type')
  }
}

...

Credits

Support

Having trouble? Open an issue!

License

The MIT License (MIT). Please see License File for more information.