>  기사  >  PHP 프레임워크  >  당신이 알아야 할 8가지 Laravel 모델 타임스탬프 사용 팁(컬렉션)

당신이 알아야 할 8가지 Laravel 모델 타임스탬프 사용 팁(컬렉션)

青灯夜游
青灯夜游앞으로
2021-12-20 16:43:362784검색

다음 튜토리얼 칼럼은 Laravel에서 Laravel 모델 타임스탬프를 사용하는 방법에 대한 8가지 팁을 공유합니다. 아직 사용해 본 적이 없다면 지금 수집해 보세요.

당신이 알아야 할 8가지 Laravel 모델 타임스탬프 사용 팁(컬렉션)

기본적으로 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();User::latest()->get();

默认情况,latest() 使用 created_at 排序。

与之对应,有一个 oldest() ,将会这么排序 created_at ascending

User::oldest()->get();

当然,也可以使用指定的其他字段排序。例如,如果想要使用 updated_at,可以这么做:

$lastUpdatedUser = User::latest('updated_at')->first();

6、不触发 updated_at 的修改

无论何时,当修改 Eloquent 记录,都将会自动使用当前时间戳来维护 updated_at 字段,这是个非常棒的特性。

但是有时候你却不想这么做,例如:当增加某个值,认为这不是 “整行更新”。

那么,你可以一切如上 —— 只需禁用 timestamps,记住这是临时的:

$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();复制代码

7、仅更新时间戳和关联时间戳

与上一个例子恰好相反,也许您需要仅更新 updated_at 字段,而不改变其他列。

所以,不建议下面这种写法:

$user->update(['updated_at' => now()]);

您可以使用更快捷的方法:

$user->touch();

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

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

User::oldest()->get();

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

class Comment extends Model {

  protected $touches = ['post'];

  public function post()
  {
    return $this->belongsTo('Post');
  }

}
6.update_at

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

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

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

$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);

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

정확히 이전 예와 반대입니다. 다른 열을 변경하지 않고 update_at 필드. 🎜🎜따라서 다음 작성 방법은 권장하지 않습니다: 🎜🎜$user->update(['updated_at' => now()]);🎜🎜더 빠른 방법을 사용할 수 있습니다: 🎜 🎜$user->touch();🎜🎜또 다른 상황은 때로는 현재 모델의update_at을 업데이트하고 싶을 뿐만 아니라 상위 관계의 기록도 업데이트하고 싶을 때도 있습니다. 🎜🎜예를 들어 댓글이 업데이트되면 게시물 테이블의 update_at를 업데이트하려고 합니다. 🎜🎜그런 다음 모델에서 $touches 속성을 정의해야 합니다: 🎜rrreee🎜🎜8. Timestamp 필드는 자동으로 Carbon 클래스로 변환됩니다. 🎜🎜🎜마지막 팁이지만 이미 알고 있어야 하기 때문에 알림에 가깝습니다. 🎜🎜기본적으로created_at및update_at필드는 자동으로 $dates로 변환되므로 🎜🎜Carbon의 메소드를 사용하기 위해 Carbon 인스턴스로 변환할 필요가 없습니다. 🎜🎜예: 🎜rrreee🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜

위 내용은 당신이 알아야 할 8가지 Laravel 모델 타임스탬프 사용 팁(컬렉션)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제