【问题标题】:Loopback model CURRENT_TIMESTAMP环回模型 CURRENT_TIMESTAMP
【发布时间】:2015-03-21 22:21:39
【问题描述】:

我有一个这样的模型 -

{
  "name": "MakeCallTestConfiguration",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "id": {
      "type": "number",
      "id": true,
      "generated": true
    },
    "destination": {
      "type": "string",
      "required": true
    },
    "clientId": {
      "type": "number",
      "required": true
    },
    "logTime":{
      "type" : "date",
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": []
}

对于“logTime”,如何自动生成时间戳?我的意思是像

“TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP”

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

    更新您的模型 JSON 文件并将 logTime 字段更改为此

    "logTime": {
        "type": "date",
        "dataType": "timestamp",
        "defaultFn": "now"
    }
    

    这样就可以了。

    【讨论】:

      【解决方案2】:

      如果您查看Loopback Documentation,您会看到如果您指定日期,它将创建一个Javascript 日期对象,无论如何。因此,如果你想要一个 Unix 时间戳,你可以在你的模型上创建一个类型 number(甚至是 String),然后如果你使用 new Date() 创建它会保存为时间戳。这是一个例子:

      你的模特:

      "logTime":{
        "type" : "number"
      }
      

      你的逻辑:

      yourModel.logTime = new Date();
      

      你的结果:

      {
        .
        "logTime": 1480437102036
        .
      }
      

      【讨论】:

        【解决方案3】:

        Loopback 有一些简洁的默认功能可以完全满足您的需求。在您的 Model.json 文件中,您可以实现它。您的“模型的属性属性”之一是 defaultFn,您可以使用“now”属性设置它来解决您的问题(参见代码示例)。

        如文档中所述:

        “now”:使用 new Date() 返回的当前日期和时间

        其他很酷且有用的默认函数用于在模型定义文件上设置 guidsuuids 创建权。

        代码示例

        ...
        "properties": {
           ...
            "logTime":{
              "type" : "date",
              "defaultFn": "now"
            }
        }, 
        ...
        

        使用此设置,logTime 的默认值将始终根据需要设置为当前时间戳。

        参考

        Loopback 文档有时会令人不快,但真正值得阅读主要部分并进一步研究它们在 github 上提供的许多示例。目前,如果您想了解更多关于defaultFn 功能的信息,这就是您需要的网址:

        http://loopback.io/doc/en/lb2/Model-definition-JSON-file.html#general-property-properties

        【讨论】:

          【解决方案4】:

          你可以使用“$now”属性

          "logTime":{
            "type": "date",
            "required": true,
            "default": "$now"
          }
          

          【讨论】:

          • $nownow有什么区别?
          【解决方案5】:

          使用模型挂钩(即 beforeCreate)并在那里设置日期。这是一个使用远程挂钩的示例(因为我没有使用模型挂钩的示例)-https://github.com/strongloop/loopback-getting-started-intermediate/blob/master/common/models/review.js#L4

          查看模型钩子文档了解更多信息:http://docs.strongloop.com/display/LB/Model+hooks

          【讨论】:

          • 嗨,谢谢,我知道 abiut 模型挂钩。但我想在 db 模式级别执行此操作,正如我上面提到的 CURRENT_TIMESTAMP
          • 你试过"logTime": {"type": "date", "dataType": "timestamp" }吗?
          • 我在开始这个线程之前试过了,但是如果你看到上面的声明,你声明了数据及其类型,但是没有关于“默认使用当前时间”的说明,这是由“DEFAULT”完成的CURRENT_TIMESTAMP”。由于 strongloop 是包装 ORM(对象关系映射),所以必须有一种方法将其传递给 DB 层。我知道在上层使用 JS 有很多方法可以做到这一点,但我希望由 DB 来完成。
          • 您使用的是哪个连接器? MySQL?
          • 我问了我的一位同事,他说你可以有 db 特定的默认值。请参阅此 PR github.com/strongloop/loopback-connector-postgresql/pull/54
          猜你喜欢
          • 2016-06-26
          • 1970-01-01
          • 2018-09-28
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多