Thứ Ba, 13 tháng 4, 2021

Lucid ORM - Traits trong AdonisJS




## Traits
- Viết các chức năng có thể sử dụng chung cho nhiều models
- Viết xử lý các hook cho model
- Viết các method mở rộng cho Query Builder

Một ví dụ cho trait là `SlugifyProvider`.
https://github.com/adonisjs/adonis-lucid-slugify
> adonis install @adonisjs/lucid-slugify

## Tạo mới một Trait
> adonis make:trait NewTrait
==> Output: app/Models/Traits/NewTrait.js

File app/Models/Traits/NewTrait.js
<!-->
'use strict'

class NewTrait {
register (Model, customOptions = {}) {
const defaultOptions = {}
const options = Object.assign(defaultOptions, customOptions)
}
}

module.exports = NewTrait
<-->

## Đăng ký Trait
<!-->
const Model = use('Model')

class User extends Model {
static boot () {
super.boot()
this.addTrait('NewTrait')
}
}
<-->

## Đăng ký Trait với Options
<!-->
const Model = use('Model')

class User extends Model {
static boot () {
super.boot()
this.addTrait('NewTrait', {useCamelCase: true})
}
}
<-->
File app/Models/Traits/NewTrait.js
<!-->
const _ = require('lodash')

class NewTrait {

register (Model, customOptions) {
const defaultOptions = {useCamelCase: false}
const options = _.extend({}, defaultOptions, customOptions)
}
}

module.exports = NewTrait
<-->

## Mở rộng các Model Methods
File app/Models/Traits/NewTrait.js
<!-->
class NewTrait {

register (Model, options) {
// Add a static method
Model.newAdminUser = function () {
let m = new Model()
m.isAdmin = true
return m
}

// Add an instance method
Model.prototype.printUsername = function () {
console.log(this.username)
}
}
}

module.exports = NewTrait
<-->

## Thêm Model Hooks
<!-->
class NewTrait {

register (Model, options) {
Model.addHook('beforeCreate', function (modelInstance) {
// create slug
})
}
}

module.exports = NewTrait
<-->

## Mở rộng Query Builder
<!-->
class NewTrait {

register (Model, options) {
Model.queryMacro('whereSlug', function (value) {
this.where('slug', value)
return this
})
}
}

module.exports = NewTrait
<-->

==>
Sử dụng : `await User.query().whereSlug('some value')`



Không có nhận xét nào:

Đăng nhận xét

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...