adonis-lucid-morphable
v1.0.1
Published
Adonis Lucid ^4.1.0 Polymorphic Relations Support.
Downloads
7
Maintainers
Readme
Adonis Lucid Polymorphic
Polymorphic Relations support for Adonis Lucid ^4.1.0.
Installation
- Add package:
$ npm i adonis-lucid-polymorphic --save
or
$ 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 - 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.