> PHP 프레임워크 > Laravel > Laravel 모델 타임스탬프 사용을 위한 8가지 팁

Laravel 모델 타임스탬프 사용을 위한 8가지 팁

藏色散人
풀어 주다: 2020-01-20 13:20:53
앞으로
4280명이 탐색했습니다.

기본적으로 Laravel Eloquent 모델 기본 데이터 테이블에는created_at 및update_at라는 두 개의 필드가 있습니다. 물론, 우리는 많은 사용자 정의 구성을 만들고 많은 흥미로운 기능을 구현할 수 있습니다. 다음은 몇 가지 예입니다.

1. 타임스탬프 비활성화

데이터 테이블에 Model::create($arrayOfValues); 두 필드가 없으면 데이터를 저장할 때 SQL 오류가 표시됩니다. Laravel은 Created_at/update_at를 자동으로 채울 때 이 두 필드를 찾을 수 없습니다.

타임스탬프 자동 채우기를 비활성화하려면 Eloquent 모델에 이전 속성을 추가하세요:

class Role extends Model
{
    public $timestamps = FALSE;
    // ... 其他的属性和方法
}
로그인 후 복사

2. 타임스탬프의 기본 목록을 수정하세요

현재 Laravel 유형이 아닌 데이터베이스를 사용하고 있다면 타임스탬프 열 이름 지정 방법이 다른 경우 어떻게 해야 합니까? 아마도 각각 create_time 및 update_time이라고 합니다. 축하합니다. 모델에서 다음과 같이 정의할 수도 있습니다:

class Role extends Model
{
    const CREATED_AT = 'create_time';
    const UPDATED_AT = 'update_time';
로그인 후 복사

3. 타임스탬프 날짜/시간 형식 수정

다음 내용은 공식 Laravel 문서를 참조합니다.

기본적으로 타임스탬프는 다음과 같은 형식으로 자동 지정됩니다. 'Y-m-d H:i:s'. 사용자 정의 타임스탬프 형식이 필요한 경우 모델에서 $dateFormat 속성을 설정할 수 있습니다. 이 속성은 날짜가 데이터베이스에 저장되는 형식과 배열 또는 JSON으로 직렬화될 때의 형식을 결정합니다.

class Flight extends Model
{
    /**
     * 日期时间的存储格式
     *
     * @var string
     */
    protected $dateFormat = 'U';
}
로그인 후 복사

4 다대다: 타임스탬프가 있는 중간 테이블

다대일 경우 대다 연관, 사용자 테이블 사용자와 역할 테이블 역할 사이의 중간 테이블 role_user와 같이 타임스탬프는 자동으로 채워지지 않습니다.

이 모델에서는 다음과 같이 관계를 정의할 수 있습니다.

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
로그인 후 복사

그런 다음 사용자에게 역할을 추가하려는 경우 다음과 같이 사용할 수 있습니다.

$roleID = 1;
$user->roles()->attach($roleID);
로그인 후 복사

기본적으로 이 중간 테이블에는 타임스탬프가 포함되지 않습니다. 그리고 Laravel은 Created_at/updated_at

을 자동으로 채우려고 시도하지 않지만 타임스탬프를 자동으로 저장하려면 마이그레이션 파일에 Create_at/updated_at를 추가한 다음 모델의 ->withTimestamps();

public function roles()
{
    return $this->belongsToMany(Role::class)->withTimestamps();
}
로그인 후 복사

를 추가해야 합니다. 연관 5. 타임스탬프 정렬을 위해 최신() 및 가장 오래된() 사용

타임스탬프 정렬을 사용하는 데는 두 가지 "단축 방법"이 있습니다.

대신:

User::orderBy('created_at', 'desc')->get();
로그인 후 복사

이렇게 하는 것이 더 빠릅니다.

User::latest()->get();
로그인 후 복사

기본적으로 최신()은 Created_at 정렬을 사용합니다.

따라서, selected_at 오름차순으로 정렬되는 maximum()이 있습니다.

User::oldest()->get();
로그인 후 복사

물론, 지정된 다른 필드를 기준으로 정렬할 수도 있습니다. 예를 들어,update_at를 사용하려면 다음과 같이 할 수 있습니다:

$lastUpdatedUser = User::latest('updated_at')->first();
로그인 후 복사

6.update_at

수정을 트리거하지 마세요. Eloquent 레코드가 수정될 때마다 update_at 필드는 현재 타임스탬프를 사용하여 자동으로 유지됩니다. 이것은 매우 멋진 기능입니다.

그러나 때로는 이 작업을 수행하고 싶지 않을 수도 있습니다. 예를 들어 특정 값을 추가할 때 이것이 "전체 행 업데이트"가 아니라고 생각합니다.

따라서 위와 같이 모든 작업을 수행할 수 있습니다. 타임스탬프를 비활성화하기만 하면 됩니다. 임시적인 것임을 기억하세요.

$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();
로그인 후 복사

7. 타임스탬프와 관련 타임스탬프만 업데이트하세요

정확히 이전 예와 반대입니다. 다른 열을 변경하지 않고 update_at 필드.

그래서 다음과 같은 작성 방법은 권장되지 않습니다.

$user->update(['updated_at' => now()]);
로그인 후 복사

더 빠른 방법을 사용할 수 있습니다:

$user->touch();
로그인 후 복사

또 다른 경우에는 현재 모델의 selected_at만 업데이트하는 것이 아니라 레코드도 업데이트하고 싶을 때가 있습니다. 우월한 관계.

예를 들어 댓글이 업데이트되면 게시물 테이블의 update_at를 업데이트하려고 합니다.

그런 다음 모델에서 $touches 속성을 정의해야 합니다.

class Comment extends Model {
    protected $touches = ['post'];
    public function post()
    {
        return $this->belongsTo('Post');
    }
}
로그인 후 복사

8. Timestamp 필드는 자동으로 Carbon 클래스로 변환됩니다.

마지막 팁이지만 이미 알고 있어야 하므로 알림에 가깝습니다.

기본적으로 Created_at 및 update_at 필드는 자동으로 $dates로 변환되므로

Carbon의 메서드를 사용하기 위해 Carbon 인스턴스로 변환할 필요가 없습니다.

예:

$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);
로그인 후 복사

바로 그 것입니다. 빠르고 유용한 팁입니다!

laravel 프레임워크와 관련된 더 많은 기술 기사를 보려면 laravel 튜토리얼 칼럼을 방문하세요!

위 내용은 Laravel 모델 타임스탬프 사용을 위한 8가지 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿