Laravel 迁移:将 stored()(生成的列)与 subtime() MySQL 函数结合使用
Laravel migration: Using storedAs() (generated colum) with subtime() MySQL function
这是我在迁移中的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
开始的事件,但我希望它在开始前 'expire' 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 |
+-------+---------------------+----------------+---------------------+
我在这里做错了什么?
我不知道如何转义字符。这个:
$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 |
+-------+---------------------+----------------+---------------------+
这是我在迁移中的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
开始的事件,但我希望它在开始前 'expire' 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 |
+-------+---------------------+----------------+---------------------+
我在这里做错了什么?
我不知道如何转义字符。这个:
$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 |
+-------+---------------------+----------------+---------------------+