adonis-lucid-polymorphic
adonis-lucid-polymorphic copied to clipboard
!!! Maintainer Needed !!!
I currently don't have the resources to maintain this project. If someone is willing to put in the time to do it, I'm willing to assign the necessary privileges to that person. If you're willing to do this, reply on issue or send me email.
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.