Polymorphic Relations support for Adonis Lucid ^4.1.0.
- 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',
...
]
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
// 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
...
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')
}
}
...
...
class Post extends Model {
static get traits () {
return ['@provider:Morphable']
}
comments () {
return this.morphMany('App/Models/Comment', 'id', 'commentable_id', 'commentable_type')
}
}
...
...
class Publication extends Model {
static get traits () {
return ['@provider:Morphable']
}
content () {
return this.morphOne('App/Models/Content', 'id', 'contentable_id', 'contentable_type')
}
}
...
Having trouble? Open an issue!
The MIT License (MIT). Please see License File for more information.