diff --git a/docs/reference/filter-operators.md b/docs/reference/filter-operators.md index e424252e8..8918ec946 100644 --- a/docs/reference/filter-operators.md +++ b/docs/reference/filter-operators.md @@ -43,6 +43,77 @@ toc: menu - empty - notEmpty +多选字段以什么类型存储还有待商榷,可能的思路有两个: + +直接用 JSON 类型,是 Attribute 的字段: + +优点:不用 appends 处理,创建、修改、查询的格式是一致的 +缺点:不利于查询,性能差,或者不支持 + +```ts +{ + type: 'json', + name: 'aa', +} + +// 创建 +await Repository.create({ + values: { + aa: ['option1', 'option2'] + }, +}); + +// 修改 +await Repository.update({ + values: { + aa: ['option1', 'option2'] + }, +}); + +// 查询 +const model = await Repository.findOne(); + +model.aa // ['option1', 'option2'] +``` + +用 HasMany 类型,是 Association 字段 + +- 优点:支持查询 +- 缺点:需要 appends,创建、修改、查询的格式如果要保持统一需要做一些格式化处理 + +如: + + +```ts +{ + type: 'hasMany', + name: 'aa', + target: 'xxx_options' // 自动生成 options 表,只有两个字段 value 和 foreignKey(联合主键) +} + +// 创建 +await Repository.create({ + values: { + aa: ['option1', 'option2'] // option1 和 option2 存到 value 里 + }, +}); + +// 更新 +await Repository.create({ + values: { + aa: ['option3', 'option4'] // option1 和 option2 存到 value 里 + }, +}); + +// 查询 +const model = await Repository.findOne(); + +// 如果不特殊处理,输出的格式是这样的: +model.aa // [{value: 'option1', foreignKey: 1}, {value: 'option2', foreignKey: 1}] +// 可以进一步格式化为: +model.aa // ['option1', 'option2'] +``` + ## date - dateOn