다음 튜토리얼 칼럼은 Laravel에서 Laravel 모델 타임스탬프를 사용하는 방법에 대한 8가지 팁을 공유합니다. 아직 사용해 본 적이 없다면 지금 수집해 보세요.
기본적으로 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();
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);정확히 이전 예와 반대입니다. 다른 열을 변경하지 않고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!