Quản Lý Thời Gian Tự Động Trong Eloquent
16483

# Timestamps

Mặc định, Eloquent yêu cầu hai cột created_atupdated_at tồn tại trên bảng cơ sở dữ liệu tương ứng với mô hình của bạn. Eloquent sẽ tự động thiết lập giá trị cho các cột này khi mô hình được tạo mới hoặc cập nhật.

Tuy nhiên, nếu bạn không muốn Eloquent tự động quản lý các cột thời gian này, bạn có thể cấu hình mô hình của bạn để bỏ qua việc tự động cập nhật các cột created_atupdated_at. Để làm điều này, bạn cần định nghĩa thuộc tính $timestamps trên mô hình của bạn với giá trị false.

Ví Dụ Cụ Thể

Mô Hình Mặc Định Với Cột Thời Gian

Khi bạn tạo một mô hình Eloquent mà không cấu hình thuộc tính $timestamps, Eloquent sẽ tự động quản lý các cột thời gian:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // Eloquent tự động quản lý created_at và updated_at
}

Bỏ Qua Quản Lý Thời Gian

Nếu bạn không muốn Eloquent tự động quản lý created_atupdated_at, bạn có thể cấu hình mô hình của bạn như sau:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // Tắt quản lý created_at và updated_at
    public $timestamps = false;
}

# Tùy Chỉnh Định Dạng Thời Gian

Nếu bạn cần tùy chỉnh định dạng của các timestamp trên mô hình Eloquent của bạn, bạn có thể thiết lập thuộc tính $dateFormat trên mô hình. Thuộc tính này xác định cách các thuộc tính ngày tháng được lưu trữ trong cơ sở dữ liệu cũng như định dạng của chúng khi mô hình được chuyển đổi thành mảng hoặc JSON.

Ví Dụ Cụ Thể

Giả sử bạn muốn thay đổi định dạng ngày tháng từ mặc định (Y-m-d H:i:s) thành định dạng khác, chẳng hạn như d/m/Y H:i:s, bạn có thể thực hiện điều này bằng cách cấu hình thuộc tính $dateFormat trong mô hình của bạn.

Mô Hình Với Định Dạng Tùy Chỉnh

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // Đặt định dạng ngày tháng tùy chỉnh
    protected $dateFormat = 'd/m/Y H:i:s';
}

Cách Hoạt Động

  • Lưu Trữ Trong Cơ Sở Dữ Liệu: Khi bạn lưu một mô hình vào cơ sở dữ liệu, Eloquent sẽ sử dụng định dạng d/m/Y H:i:s để lưu trữ giá trị thời gian vào các cột created_atupdated_at.
  • Chuyển Đổi Thành Mảng hoặc JSON: Khi bạn chuyển đổi mô hình thành mảng hoặc JSON, giá trị của các thuộc tính ngày tháng sẽ được định dạng theo cách bạn đã chỉ định trong thuộc tính $dateFormat.

# Tùy Chỉnh Tên Cột Thời Gian Trong Eloquent

Nếu bạn cần tùy chỉnh tên của các cột được sử dụng để lưu trữ timestamp (created_atupdated_at), bạn có thể định nghĩa các hằng số CREATED_ATUPDATED_AT trên mô hình của bạn. Điều này cho phép bạn thay đổi tên các cột mặc định mà Eloquent sử dụng để lưu trữ thời gian tạo và cập nhật.

Ví Dụ Cụ Thể

Giả sử bạn có các cột trong bảng cơ sở dữ liệu với tên là created_onupdated_on thay vì created_atupdated_at. Bạn có thể cấu hình mô hình của bạn như sau:

Mô Hình Với Tên Cột Tùy Chỉnh

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // Định nghĩa tên cột tùy chỉnh cho thời gian tạo và cập nhật
    const CREATED_AT = 'created_on';
    const UPDATED_AT = 'updated_on';
}

Cách Hoạt Động

  • Lưu Trữ Trong Cơ Sở Dữ Liệu: Eloquent sẽ sử dụng các tên cột tùy chỉnh (created_onupdated_on) thay vì các tên mặc định (created_atupdated_at) khi lưu trữ giá trị thời gian vào cơ sở dữ liệu.
  • Lấy Dữ Liệu: Khi bạn lấy dữ liệu từ cơ sở dữ liệu, Eloquent sẽ sử dụng các tên cột tùy chỉnh này để gán giá trị cho thuộc tính created_atupdated_at của mô hình.

# Không Cập Nhật updated_at

Nếu bạn muốn thực hiện các thao tác với mô hình mà không làm thay đổi giá trị của timestamp updated_at, bạn có thể sử dụng phương thức withoutTimestamps. Phương thức này cho phép bạn thực hiện các thao tác trên mô hình mà không ảnh hưởng đến giá trị của updated_at.

Ví Dụ Cụ Thể

Giả sử bạn có một mô hình Post và bạn muốn cập nhật một thuộc tính của mô hình mà không làm thay đổi timestamp updated_at, bạn có thể sử dụng withoutTimestamps để thực hiện điều này.

Cập Nhật Mô Hình Mà Không Cập Nhật updated_at

use App\Models\Post;

// Tìm mô hình cần cập nhật
$post = Post::find(1);

// Thực hiện cập nhật mà không làm thay đổi timestamp
$post->withoutTimestamps(function () use ($post) {
    // Cập nhật thuộc tính của mô hình
    $post->title = 'New Title';
    $post->save();
});

Danh mục


  1. Khác
  2. ThreeJS
  3. Ubuntu/Linux
  4. HTML/CSS
  5. Git
  6. Amazon Web Services
  7. Javascript
  8. Docker
  9. Laravel

Bài viết liên quan


Các Mối Quan Hệ Trong Eloquent

Các Mối Quan Hệ Trong Eloquent

01.08.2024
Author: ADMIN
Tìm hiểu cách thiết lập và sử dụng các mối quan hệ trong Eloquent Laravel, giúp quản lý dữ liệu dễ dàng và linh hoạt hơn.
Basic Eloquent Model and MVC

Basic Eloquent Model and MVC

01.08.2024
Author: ADMIN
Tìm hiểu cách Laravel triển khai kiến trúc MVC với Model, View, Controller. Hướng dẫn chi tiết về Eloquent, xử lý logic trong Controller và hiển thị dữ liệu với Blade.
Eager Loading

Eager Loading

01.08.2024
Author: ADMIN
Eager Loading trong Eloquent giúp tối ưu hiệu suất bằng cách giảm số lượng truy vấn không cần thiết. Tìm hiểu cách sử dụng with, withCount và nested eager loading cho các mối quan hệ phức tạp!
Database: Seeding

Database: Seeding

01.08.2024
Author: ADMIN
Laravel Seeding giúp tự động tạo dữ liệu mẫu nhanh chóng. Tìm hiểu cách tạo, chạy seeder, kết hợp factory, và sử dụng trong production một cách an toàn! 🚀

Bài viết khác

Routing

Routing

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về Basic Routing trong Laravel, từ cách định nghĩa route, sử dụng middleware, route caching đến route naming giúp tối ưu hóa ứng dụng.
Blade Basics

Blade Basics

01.08.2024
Author: ADMIN
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!
9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

01.08.2024
Author: ADMIN
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!
Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!