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
Polymorphic Relations support for Adonis Lucid ^4.1.0.
Installation
- Add package:
$ npm i adonis-lucid-polymorphic --saveor
$ yarn add adonis-lucid-polymorphic- 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 - stringModel 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 = VideoAPI
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.