1.0.1 • Published 5 years ago

adonis-lucid-morphable v1.0.1

Weekly downloads
5
License
MIT
Repository
github
Last release
5 years ago

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.