Tôi không muốn created_at, updated_at tự động chèn vô tội vạ
Bài đăng này đã không được cập nhật trong 6 năm
Tôi mới chuyển sang mần web với Laravel hơn một tháng nay, vui buồn lẫn lộn các bác ạ. Cảm nhận ban đầu khi phải chuyển qua một ngôn ngữ mới, một framework mới ờ thì phê thật. Tôi thấy được nhiều cái hay, mới lạ và cũng có một chút gì đó quen thuộc của Java, C# mà tôi đã từng làm bằng hữu. Nhìn chung, khi làm việc với nó, không có thứ gì phải chê bai, mọi thứ xử lý hết sức nhanh gọn lẹ, còn cái gì không nhanh gọn được thì chắc do tôi còn kém quá
Không liên quan chút, hôm nay U23 Việt Nam thắng U23 Qatar tung bông nào
À, suýt nữa thì quên, cái created_at
, updated_at
trong Laravel dùng sướng đấy chứ nhỉ, không phải new Date
rồi insert này nọ mà vẫn có được ngày giờ trong database, ai làm chức năng post bài, tin tức chắc hết vất vả rồi
Nhưng nếu tạo mấy cái như danh mục, tùy chọn,... thì có cần thiết phải thêm created_at, updated_at không nhỉ? Tôi thấy nó thừa trong khi vẫn có thể cài đặt lại không để tự chèn vô tội vạ nhưng nhiều bạn không để ý, chèn vô đó thì kệ nó, mình không lấy thì thôi. Với tôi, tôi nghĩ nó sẽ làm database béo lên một tý, ổ đĩa vì thế cũng mất đi một khoảng để chứa một ít phim Hàn + Nhật rồi
Thế là tôi loay hoay trừ khử nó
Search thôi nào, tất cả đều có hết trên google
Tôi tìm được từ khóa liên quan đến 2 anh created_at
và updated_at
là timestamps
. Loay hoay một tý nữa mới biết nó là biến của model.
Thử áp dụng vô project đang làm. Như một phép màu, được liền à.
Tôi đã tạo mới một item, sử dụng:
Item::create(['title'=>'ai lớp diu']);
Item Model thì như thế này:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
public $fillable = ['title'];
}
Chắc các bạn cũng biết, khi chèn mới một item vào database, mặc định created_at
và updated_at
sẽ tự động được chèn với ngày giờ hiện tại, cùng với title
có mặt trong table mà chúng ta mong muốn.
Nhưng khi tôi thêm thuộc tính $timestamps
cho class Item và gán cho nó giá trị false
thì lúc tạo mới một item, 2 thông tin created_at
, updated_at
đã có giá trị là NULL
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
public $fillable = ['title'];
public $timestamps = false;
}
Vậy là hoàn thành mục đích
(Nếu bạn không muốn 2 trường đó có mặt trong table thì lúc tạo migration đừng bỏ $table->timestamps()
vào, đồng thời set $timestamp = false
như trên nhé)
Một chuyện khác
Thế có lúc nổi điên tôi lại muốn Laravel tự động insert chỉ created_at hoặc updated_at thôi thì phải làm thế lào :billed_cap: Dù không nổi điên thì thật sự trường hợp đó có nhé, cụ thể là khi nào thì các bạn tự hình dung vậy.
Nếu thật sự các bạn muốn vậy thì làm thế này
Muốn chỉ insert trường created_at
Thêm const UPDATED_AT vào model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
public $fillable = ['title'];
const UPDATED_AT = null;
}
Ngược lại, muốn chỉ insert updated_at
Thêm const CREATED_AT vào model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
public $fillable = ['title'];
const CREATED_AT = null;
}
Vâng, chỉ đơn giản vậy thôi mà đã làm mất của con nguyên một buổi tối không thể dẫn gấu đi chơi đó các bác ạ. Cái gì mới bắt đầu cũng khổ
Bài viết chỉ mang tính chém gió là phần nhiều, kiến thức còn nông, lời văn chưa được bay bướm, hẹn gặp lại quý vị một ngày không xa.
All rights reserved