Класс модели наследуется от Tag
из публичной части блога.
Правило filter
изменяет значение атрибута, указанным обработчиком.
В данном случае trim
отсекает пустые символы в начале и в конце названия метки.
Правила применяются в порядке расположения,
таким образом следующие за фильтром уже будут работать с измененным атрибутом.
Константа UNLINK_ON_REMOVE
содержит связи, которые должны быть разорваны при удалении
объекта метки. В противном случае связь будет содержать ссылку на несуществующий объект.
module/admin/model/Tag.js
const Base = require('../../../model/Tag');
module.exports = class Tag extends Base {
static getConstants () {
return {
RULES: [
['name', 'required'],
['name', 'filter', {filter: 'trim'}],
['name', 'string', {min: 2, max: 32}],
['name', 'unique', {ignoreCase: true}]
],
INDEXES: [[{name: 1}, {unique: true}]],
UNLINK_ON_REMOVE: ['articles']
};
}
};
module.exports.init(module);
const Article = require('./Article');
Метод findByName
ищет метки по указанному названию, но без учета регистра.
module/admin/model/Tag.js
static findByName (name) {
return this.find({name: new RegExp(`^${name}$`, 'i')});
}
Метод findBySearch
ищет метки, у которых название содержит указанный текст.
module/admin/model/Tag.js
static findBySearch (text) {
return text
? this.find(['LIKE', 'name', `%${text}%`])
: this.find();
}
Отношение relArticles
определяет статьи, которые привязаны к метке.
Метод переопределяет подобный из родительского класса, потому что
в отношении используется модель статьи из модуля администрирования.
В метод hasMany
последний аргумент true
означает,
что при разрыве связи запись о ней должна быть удалена. В данном случае удаляется
запись из таблицы rel_article_tag
.
module/admin/model/Tag.js
relArticles () {
return this.hasMany(Article, Article.PK, 'articleId')
.viaTable('rel_article_tag', 'tagId', this.PK)
.removeOnUnlink();
}