Narcoleptic Pasta Manufacturer

    adonis4-lucid-polymorphic

    0.1.0 • Public • Published

    Adonis Lucid Polymorphic

    Polymorphic Relations support for Adonis 4.x Lucid.

    Installation

    1. Add package:
    $ npm i adonis4-lucid-polymorphic --save

    or

    $ yarn add adonis4-lucid-polymorphic
    1. Register providers inside the your bootstrap/app.js file.
    const providers = [
      ...
      'adonis4-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', 'commentable', 'id')
      }
    }
     
    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', 'commentable', 'id')
      }
    }
     
    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('commentable', [
          'App/Models/Post', 'App/Models/Video'
        ])
      }
    }
     
    module.exports = Video

    API

    morphTo(determiner, morphMap, [primaryKey])

    ...
     
    class Comment extends Model {
      static get traits () {
        return ['@provider:Morphable']
      }
     
      commentable () {
        return this.morphTo('commentable', [
          'App/Models/Post', 'App/Models/Video'
        ], 'id')
      }
    }
     
    ...

    morphMany(relatedModel, determiner, [primaryKey])

    ...
     
    class Post extends Model {
      static get traits () {
        return ['@provider:Morphable']
      }
     
      comments () {
        return this.morphMany('App/Models/Comment', 'commentable', 'id')
      }
    }
     
    ...

    morphOne(relatedModel, determiner, [primaryKey])

    ...
     
    class Publication extends Model {
      static get traits () {
        return ['@provider:Morphable']
      }
     
      content () {
        return this.morphOne('App/Models/Content', 'contentable', 'id')
      }
    }
     
    ...

    Credits

    Support

    Having trouble? Open an issue!

    License

    The MIT License (MIT). Please see License File for more information.

    Install

    npm i adonis4-lucid-polymorphic

    DownloadsWeekly Downloads

    1

    Version

    0.1.0

    License

    MIT

    Unpacked Size

    125 kB

    Total Files

    17

    Last publish

    Collaborators

    • schepotin