validationRule 中的组合列

combination columns in validationRule

我是 Adonis.js 的新手,我有这样的用户迁移:

  table.enu('type', ['client','admin','super_admin']),
  table.string('mobile', 80).notNullable().unique();

现在,我想检查 mobile + type 在验证中对所有用户都是唯一的,而我只能使用此代码检查移动设备的唯一性:

mobile : 'required|string|unique:users,mobile',

我怎么能这样?

使用 Adonis.js 自己的验证器是不可能的。您应该为这种用例编写自己的验证方法。

查看 Adonisjs 创始人的回复:https://forum.adonisjs.com/t/several-unique-fields/1430/3

我使用扩展验证器创建了类似的东西:

async unique_combinationFn(data, field, message, args, get) { // eslint-disable-line
const Database = use('Database');
const value = get(data, field);
if (!value) {
  return;
}
const [table, ...columns] = args;

const multipleClauses = columns.reduce(
  (oldObject, column) => ({
    ...oldObject,
    [column]: data[column],
  }),
  {}
);

const where = { ...multipleClauses, [field]: value };

const row = data.id
  ? await Database.table(table)
      .where(where)
      .whereNot('id', data.id)
      .first()
  : await Database.table(table)
      .where(where)
      .first();
if (row) {
  throw message;
}

}

并使用:

code: [rule('required'), rule('unique_combination', ['users', 'company_id'])],

您可以在 link 的文档中找到更多信息:

Extending Validator