我正在创建一个这样的表,
Schema::create('booking_segments', function (Blueprint $table) {
$table->increments('id');
$table->datetime('start')->index();
$table->integer('duration')->unsigned();
$table->string('comments');
$table->integer('booking_id')->unsigned();
$table->foreign('booking_id')->references('id')->on('bookings')->onDelete('cascade');
});
Run Code Online (Sandbox Code Playgroud)
但我想添加一个额外的列.在原始SQL中看起来像这样:
ALTER TABLE booking_segments ADD COLUMN `end` DATETIME AS (DATE_ADD(`start`, INTERVAL duration MINUTE)) PERSISTENT AFTER `start`
Run Code Online (Sandbox Code Playgroud)
如何在迁移中添加它?我还需要在其上创建一个索引.
小智 15
我知道这是一个老问题,但是有一种方法可以使用自Laravel 5.3以来的模式构建器,所以我想我会把它放在这里以保证完整性.
您可以使用laravel 5.3 列修饰符 virtualAs或storedAs.
因此,要创建要在每个查询中计算的虚拟生成列,您将创建如下列:
$table->dateTime('created_at')->virtualAs( 'DATE_ADD(`start`, INTERVAL duration MINUTE)' );
Run Code Online (Sandbox Code Playgroud)
要创建存储生成的列,您可以创建如下列:
$table->dateTime('created_at')->storedAs( 'DATE_ADD(`start`, INTERVAL duration MINUTE)' );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |