Larabel Migration을 사용하여 타임스탬프 열의 기본값을 현재 타임스탬프로 설정하려면 어떻게 해야 합니까?
.CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Laravel Schema Builder / Migrations lar lar lar 。Laravel 문서를 여러 번 살펴보았는데, 타임스탬프 열의 기본값을 어떻게 해야 할지 모르겠습니다.
timestamps()
은 「 「 」로 설정합니다.0000-00-00 00:00
두 기둥 모두 사용할 수 있습니다.
표현이이기 때문에, 이 표현은 given색 、 신색 、 신신 、 당 given 、 당 given 、 given given 、 given given given given given given 。DB::raw()
CURRENT_TIMESTAMP
이치노
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
이것은 모든 데이터베이스 드라이버에서 완벽하게 작동합니다.
Larabel 5.1.25(PR 10962 및 15c487fe를 참조) 이후 새로운 버전을 사용할 수 있게 되었습니다.useCurrent()
컬럼 수식자 메서드를 사용하여 컬럼에 대해 동일한 기본값을 얻을 수 있습니다.
$table->timestamp('created_at')->useCurrent();
에서는 "MySQL"을할 수도 있습니다.ON UPDATE
에서 절로 하다DB::raw()
:
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
다시 말씀드리지만 Laravel 8.36.0(PR 36817 참조)에서 새로운 버전을 사용할 수 있게 되었습니다.useCurrentOnUpdate()
및 수식자 메서드useCurrent()
컬럼에 대해 동일한 기본값을 얻기 위한 수식자:
$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate();
고차스
MySQL
.7 MySQL 5.7 ★0000-00-00 00:00:00
유효한 날짜로 간주되지 않습니다.Larabel 5.2 업그레이드가이드에 기재되어 있는 바와 같이 레코드를 데이터베이스에 삽입하면 모든 타임스탬프 컬럼에 유효한 디폴트값이 표시됩니다.를 사용할 수 있습니다.useCurrent()
시 컬럼 수식자5.를 사용하여 (Larabel 5.1.25)를 수 .nullable()
값을 합니다.PostgreSQL © Larabel 4.x
4. 4.x "Postgre"SQL 드라이버는 타임스탬프 값을 저장하기 위해 기본 데이터베이스 정밀도를 사용했습니다.「 」를 하는CURRENT_TIMESTAMP
기본 정밀도로 열에서 함수 PostgreSQL은 사용 가능한 더 높은 정밀도로 타임스탬프를 생성하므로 소수 두 번째 부분으로 타임스탬프를 생성합니다. 이 SQL 피들링을 참조하십시오.카본은 마이크로초가 저장될 것으로 예상하지 않기 때문에 타임스탬프 해석에 실패합니다.치 않은 것을 는 어플리케이션에 으로 부여해야 .
CURRENT_TIMESTAMP
"이것들"은 다음과 같습니다.$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));
5.이이라벨 5.0 이후
timestamp()
기둥 0이를 막을 수 있는 생략성 정밀도를 사용하여로 변경되었다.
Larabel 4.x 문제를 지적해 주신 @andrewhl님 감사합니다.
@Chanaka Karunarathne 님의 신작 소개에 감사드립니다.useCurrentOnUpdate()
숏컷이 있어요
다 created_at
★★★★★★★★★★★★★★★★★」updated_at
§:
$t->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$t->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
MySQL version > = 5.6. MySQL = 5.6.5인 것이 합니다.CURRENT_TIMESTAMP
태그 Laravel 5.1 2015-12-02 -에 lar lar lar lar lar lar lar lar lar lar lar5 . 1 . 26 ★useCurrent()
이치노
Schema::table('users', function ($table) {
$table->timestamp('created')->useCurrent();
});
PR 10962(이후 커밋 15c487fe)가 이 추가로 이어졌습니다.
관심 있는 문제 3602 및 11518을 읽어보실 수도 있습니다.
기본적으로 MySQL 5.7(기본 구성)에서는 시간 필드에 기본값을 정의하거나 null을 정의해야 합니다.
미래의 구글 이용자를 위한 추가 가능성으로
레코드가 작성되었지만 수정되지 않은 경우 updated_at 열에 null이 있으면 더 편리합니다.db 크기를 줄이고(오케이, 조금만), 데이터가 수정된 적이 없다는 것을 한눈에 알 수 있습니다.
다음과 같이 사용하고 있습니다.
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->default(DB::raw('NULL ON UPDATE CURRENT_TIMESTAMP'))->nullable();
(라라벨 7+8에서는 mysql 8).
편집: Laravel 8부터 다음 기능도 사용할 수 있습니다.
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable()->useCurrentOnUpdate();
같은 결과를 얻을 수 있습니다.
이것을 지적해 주신 @bilogic 덕분입니다.
이것은 사실로 통하지 않는다.
$table->timestamp('created_at')->default('CURRENT_TIMESTAMP');
타임스탬프 선택과 함께 제공되는 '기본값 0'은 제거되지 않고 사용자 정의 기본값만 추가됩니다.하지만 견적을 빼놓고는 그게 좀 필요해요.DB를 조작하는 모든 것이 Laravel4에서 나오는 것은 아닙니다.그게 그의 요점이야.다음과 같은 특정 열에 대한 사용자 지정 기본값을 원합니다.
$table->timestamps()->default('CURRENT_TIMESTAMP');
라라벨과 함께라면 불가능할 것 같아그게 가능한지 보려고 한 시간째 찾고 있어요.
업데이트: Paulos Freita의 답변은 가능하지만 구문은 간단하지 않습니다.
대신 Paulo Freitas 제안을 사용하십시오.
이 문제를 할 때까지 Larabel 뒤에 할 수 .Schema::create
실행되었습니다.
Schema::create("users", function($table){
$table->increments('id');
$table->string('email', 255);
$table->string('given_name', 100);
$table->string('family_name', 100);
$table->timestamp('joined');
$table->enum('gender', ['male', 'female', 'unisex'])->default('unisex');
$table->string('timezone', 30)->default('UTC');
$table->text('about');
});
DB::statement("ALTER TABLE ".DB::getTablePrefix()."users CHANGE joined joined TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL");
나한테는 놀라운 효과가 있었어.
현재 시간을 설정하려면 레벨 7, 8에서 다음을 사용합니다.
$table->timestamp('column_name')->useCurrent();
dateTime 열의 현재 날짜/시간을 설정하려면 다음과 같이 하십시오(검색할 때처럼).
$table->dateTime('signed_when')->useCurrent();
Larabel에서 사용하는 커스터마이즈는 다음과 같습니다.
- 현재 타임스탬프의 기본 created_at
- 레코드 업데이트 시 타임스탬프 업데이트
파일을helpers.php
라라벨
<?php
if (!function_exists('database_driver')) {
function database_driver(): string
{
$connection = config('database.default');
return config('database.connections.' . $connection . '.driver');
}
}
if (!function_exists('is_database_driver')) {
function is_database_driver(string $driver): bool
{
return $driver === database_driver();
}
}
composer에는 다음 내용을 composerautoload
조력자php php php php php php php php php php php php php php php 。
"autoload": {
"files": [
"app/Services/Uploads/Processors/processor_functions.php",
"app/helpers.php"
]
},
저는 라라벨 모델에 다음과 같은 것을 사용하고 있습니다.
if (is_database_driver('sqlite')) {
$table->timestamps();
} else {
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')
->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
}
이를 통해 우리 팀은 유닛 테스트에 sqlite를 계속 사용할 수 있습니다. ON UPDATE CURRENT_TIMESTAMP
MySQL sqlite 에iteite 。
이렇게 하면 됩니다.확인해보니 제 Laravel 4.2에서 동작합니다.
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
이게 도움이 됐으면 좋겠다.
나한테 효과가 있었던 건
DB::statement("ALTER TABLE orders CHANGE updated_at updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP");
Larabel 5에서는, 다음과 같이 심플합니다.
$table->timestamps(); //Adds created_at and updated_at columns.
문서: http://laravel.com/docs/5.1/migrations#creating-columns
언급URL : https://stackoverflow.com/questions/18067614/how-can-i-set-the-default-value-of-a-timestamp-column-to-the-current-timestamp-w
'programing' 카테고리의 다른 글
리스트 내의 고유값 발생을 카운트하려면 어떻게 해야 합니까? (0) | 2022.10.03 |
---|---|
MySQLdb를 사용하여 커서를 닫아야 하는 경우 (0) | 2022.10.03 |
dict에서 값 목록을 가져오려면 어떻게 해야 합니까? (0) | 2022.10.03 |
Java 스크립트의 배열에서 하위 하위 개체의 키 값을 매핑하는 방법 (0) | 2022.10.03 |
일식이 시작되지 않음 - Java 가상 시스템을 찾을 수 없습니다. (0) | 2022.10.03 |