关于数据库:waterline-model.create – 主键 | 珊瑚贝

waterline-model.create – primaryKey


我有以下带有主键 ID 的模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
attributes: {
   id: {
      type: ‘integer’,
      autoIncrement: true,
      primaryKey: true,
      unique: true
   },
    name: {
      type: ‘string’,
      unique: true,
      required: true
   },
}

我正在创建如下模型:

1
2
3
4
var model = {
     id: undefined,
     name: ‘name’,
};

waterlinemodel.create(model).exec(function(error, result) {});

但它会引发以下错误:
错误 (E_UNKNOWN) 遇到意外错误] 详细信息:错误:列 “id” 中的空值违反非空约束

因为,\\’id\\’是主键,水线不应该看\\’id\\’属性的值是什么。

如何解决这个错误?我不想删除\\’id\\’,因为我已经为模型创建了值对象,它包含模型的所有属性。我正在根据需要设置值对象属性。我不需要为创建设置 id 属性。

  • 如果不需要设置 id 属性,或者没有理由要分配自己的主键 id,为什么要这样做?如果没有明确告知不要这样做,则将自动分配主键。删除 “id: undefined” 可能会起作用。
  • 根据java脚本。如果我没有定义 id 或者我将值赋值为 undefine 两者都是相同的。仍然水线给出错误。
  • 使用 autoPK = true?根据您在下面的回复,autoPK 是错误的,因此您必须提供有效的 id。如果将 autoPK 设置为 true,则不必定义一个(可以省略 id 属性)。


我遇到了完全相同的问题,尤其是配置为使用 postgresql 的模型。将其设置为磁盘或内存时,会创建资源,但使用 postgresql 时不会创建资源并出现非空约束错误。

无论我是否设置了 autoPK: true,都不会设置 id。即使使用 autoPK:false 在模型上设置 id 属性也不起作用。


2019答??案

jaumard\\ 的文档链接现在出现 404 错误,但我认为自 2015 年以来情况可能发生了变化…

Sails.js 具有在 config/models.js 中定义的基本属性,在新生成的项目中看起来像这样:

1
2
3
4
5
attributes: {
  createdAt: { type: ‘number’, autoCreatedAt: true, },
  updatedAt: { type: ‘number’, autoUpdatedAt: true, },
  id: { type: ‘number’, autoIncrement: true, },
}

另外,默认的 primaryKey 设置为 id。如果你想覆盖它,你需要在你的完整模型定义中明确指定你的新 primaryKey 。例如,如果您想让 name 成为您的 primaryKey,您可以使用如下内容:

1
2
3
4
5
6
7
8
9
10
11
module.exports = {
  primaryKey: ‘name’,
  attributes: {
    name: {
      type: ‘string’,
      unique: true,
      required: true
    },
    // …
  },
}

请注意,我将 primaryKey 放在 attributes 之外。这个很重要。您的 primaryKey 还需要 unique 和 required 约束。

此外,如果您想禁用 id 列以便它不会提交到您的数据库,您必须将 id 替换为值 false — 但是您必须定义一个不同的 primaryKey 否则您启动应用程序时会出错。问题中显示的错误可能与模型将 id 明确定义为 undefined 的事实直接相关。如何禁用 id 的示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
  primaryKey: ‘name’,
  attributes: {
    id: false,
    name: {
      type: ‘string’,
      unique: true,
      required: true
    },
    // …
  },
}

正如文档所说:

1
2
3
4
5
6
7
8
9
Will set the primary key of the record. This should be used when autoPK is set to false.

attributes: {
  uuid: {
    type: ‘string’,
    primaryKey: true,
    required: true
  }
}

你需要在你的模型上设置 autoPK : false。


文档链接:https://github.com/balderdashy/waterline-docs/blob/master/models.md#primarykey

  • 阅读问题并从质量判断,我认为他无意设置自己的主键。根据我的阅读,他应该将 autoPK 设置为 true 并简单地删除 id: undefined 以让系统生成他的主键。
  • 所以它也必须删除 primaryKey:true
  • 您是否尝试完全删除 id: undefined ?像 var model = { name: ‘name’ };
  • 这就是问题,我不想从模型中删除 id: undefined。


来源:https://www.codenong.com/29533190/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9468.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?