Laravel迁移:将storageAs()(生成的列)与subtime()MySQL函数一起使用

时间:2018-07-13 14:13:42

标签: mysql laravel-5.5 calculated-columns laravel-migrations

这是我在迁移中的up()方法

$table->dateTimeTz('from');
$table->time('expire_by_time')->default('0:30:00');

$expression = 'subtime(\'from\', \'expire_by_time\')';
$table->dateTimeTz('expire_at')->storedAs($expression);

我所拥有的活动始于from,但我希望它在活动开始前30分钟(或一小时或50小时...)“过期”。稍后在我的代码中,我可以使用这个新生成的expire_at列进行显示或排序。

但是由于某些原因,该方法不起作用,我不断为0000-00-00 00:00:00列获取expired_at

+-------+---------------------+----------------+---------------------+
| id    | from                | expire_by_time | expire_at           |
+-------+---------------------+----------------+---------------------+
| 11111 | 2019-09-29 12:00:00 | 00:30:00       | 0000-00-00 00:00:00 |
+-------+---------------------+----------------+---------------------+

我在这里做错什么?

1 个答案:

答案 0 :(得分:0)

我不知道如何转义字符。这个:

$expression = 'subtime(\'from\', \'expire_by_time\')';

应该是这样:

$expression = 'subtime(`from`, `expire_by_time`)';

现在我明白了:

+-------+---------------------+----------------+---------------------+
| id    | from                | expire_by_time | expire_at           |
+-------+---------------------+----------------+---------------------+
| 11111 | 2019-09-29 12:00:00 | 00:30:00       | 2019-09-29 11:30:00 |
+-------+---------------------+----------------+---------------------+