adonis-lucid-morphable

1.0.1 • Public • Published

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.

Package Sidebar

Install

npm i adonis-lucid-morphable

Weekly Downloads

2

Version

1.0.1

License

MIT

Unpacked Size

33.1 kB

Total Files

12

Last publish

Collaborators

  • adamcikado