【问题标题】:Creating a new column in Laravel Schema builder, using the value of existing column by default在 Laravel Schema builder 中创建一个新列,默认使用现有列的值
【发布时间】:2017-01-16 09:58:26
【问题描述】:

我正在尝试创建一个表,其中包含一个“email_address”字段和一个“activation hash”字段。 “激活哈希”字段的默认值应该是

sha1(microtime().email_address))

是否可以使用 laravel 迁移进行设置,我该怎么做?

当然,我应该说,我正在使用 postgres 作为数据库引擎

【问题讨论】:

标签: php laravel


【解决方案1】:

大多数数据库引擎在可以将哪些值设置为列的默认值方面受到限制。根据您的数据库引擎,您可能可以通过事件/触发器来解决此问题,但使用Eloquent events 在应用程序级别解决此问题会更容易且可以说更好。

【讨论】:

    【解决方案2】:

    当我需要做这样的事情时,我将代码分成两部分:

    1. 创建列(使用 Schema Builder)
    2. 设置值(通过 PHP,加载所有模型并在 foreach 中一一更新)

    注意:这两个步骤都可以在迁移文件中完成。

    您不能完全在 MySQL(如果您使用 MySQL)查询中执行此操作,因为它没有 microtime() 函数。

    但我在 MySql 上找到了 microtime() 的这个 UDF 实现:

    https://github.com/JohannesMP/MySQL-udf-microtime

    如果您不更新庞大的数据集,我会坚持第一个解决方案。但是如果你要更新一个庞大的数据集,那么 MySQL 的实现会更快。

    【讨论】:

    • 我正在使用 Postgres。
    猜你喜欢
    • 2013-10-19
    • 2018-08-29
    • 1970-01-01
    • 2011-11-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多