post-image

10 tính năng ẩn trong Laravel Eloquent chắc chắn bạn chưa biết

Tổng quan

Laravel là một framework rất giàu tính năng. Tuy nhiên, bạn không thể tìm thấy tất cả các tính năng có sẵn trong tài liệu chính thức. Dưới đây là một số tính năng mà bạn có thể không biết.

Get original attributes

Sau khi thay đổi bản ghi Eloquent, bạn có thể lấy được các attribute gốc ban đầu bằng cách gọi getOriginal()

$user = App\User::first(); $user->name; //John $user->name = "Peter"; //Peter $user->getOriginal('name'); //John $user->getOriginal(); //Original $user record
Code language: PHP (php)

Kiểm tra xem Model có thay đổi không

Xác định xem Model hoặc Attribute được sửa đổi bằng cách sử dụng isDirty()

$user = App\User::first(); $user->isDirty(); //false $user->name = "Peter"; $user->isDirty(); //true
Code language: PHP (php)

Bạn cũng có thể kiểm tra nếu một vài attribute cụ thể được thay đổi.

$user->isDirty('name'); //true $user->isDirty('age'); //false
Code language: PHP (php)

Lấy giá trị các attribute đã được thay đổi

Truy xuất các attribute đã thay đổi của Model bằng cách sử dụng getChanges()

$user->getChanges() //[ "name" => "Peter", ]
Code language: PHP (php)

Lưu ý: Thay đổi sẽ chỉ phản ánh nếu bạn lưu Model hoặc đồng bộ hóa các thay đổi bằng cách sử dụng syncChanges()

Tùy chỉnh column deleted_at

Theo mặc định, Laravel xử lý xóa mềm bằng column deleted_at. Bạn có thể thay đổi điều này bằng cách define rõ ràng property DELETED_AT.

class User extends Model { use SoftDeletes; * The name of the "deleted at" column. * * @var string */ const DELETED_AT = 'is_deleted'; }
Code language: PHP (php)

Hoặc bằng cách define một accessor.

class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'is_deleted'; } }
Code language: PHP (php)

Lưu Model và relationship

Bạn có thể lưu một Model và relationship tương ứng của nó bằng function push().

class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } } $user = User::first(); $user->name = "Peter"; $user->phone->number = '1234567890'; $user->push(); // This will update both user and phone record in DB
Code language: PHP (php)

Reload fresh Model

Reload fresh Model từ cơ sở dữ liệu bằng cách sử dụng fresh()

$user = App\User::first(); $user->name; // John // user record get updated by another thread. eg: 'name' changed to // Peter. $updatedUser = $user->fresh(); $updatedUser->name; // Peter $user->name; // John
Code language: PHP (php)

Reload existing model

Bạn có thể reload existing model với các giá trị mới từ cơ sở dữ liệu bằng cách sử dụng refresh()

$user = App\User::first(); $user->name; // John // user record get updated by another thread. eg: 'name' changed to // Peter. $user->refresh(); $user->name; // Peter
Code language: PHP (php)

Kiểm tra xem các Model có giống nhau không

Xác định xem hai Model có cùng ID và thuộc cùng một bảng bằng cách sử dụng is()

$user = App\User::find(1); $sameUser = App\User::find(1); $diffUser = App\User::find(2); $user->is($sameUser); // true $user->is($diffUser); // false
Code language: PHP (php)

Clone Model

Bạn có thể clone một model bằng cách sử dụng replicate(). Nó sẽ tạo một bản sao của model thành một instance mới và chưa tồn tại.

$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save();
Code language: PHP (php)

Chỉ định các thuộc tính trong phương thức find()

Khi sử dụng find() hoặc findOrFail(), bạn có thể chỉ định các thuộc tính để chọn làm đối số thứ hai.

$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']);
Code language: PHP (php)

Cảm ơn các bạn đã đọc.

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tham khảo: LEVANPHU

Leave a Reply

Your email address will not be published. Required fields are marked *