Quay lại

Tracking model attribute thay đổi trong Laravel Chuyên mục PHP và Laravel    2023-08-02    430 Lượt xem    71 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Tracking model attribute thay đổi trong Laravel

Đôi khi, thật hữu ích khi biết liệu điều gì đó đã bị thay đổi trong model kể từ khi nó được tải. Chẳng hạn, bạn muốn kiểm tra xem thuộc tính is_published của model Post đã được set hay chưa trước khi publishing post tiếp theo.

Laravel có một số phương thức tiện dụng có thể được sử dụng cho những mục đích như vậy. Các phương pháp này theo dõi các thuộc tính model cho bất kỳ thay đổi nào đối với chúng trong một chu kỳ yêu cầu cụ thể. Sau đây là những phương pháp đó.

  • isDirty - Phương thức xác định xem có bất kỳ thuộc tính nào đã bị thay đổi kể từ khi model được tải và trước khi model được lưu hay không.
  • isClean - Phương thức xác định xem có bất kỳ thuộc tính nào không bị thay đổi kể từ khi model được tải và trước khi model được lưu hay không. Về cơ bản thì ngược lại với phương thức isDirty.
  • wasChanged - Phương thức xác định xem có bất kỳ thuộc tính nào bị thay đổi khi model được lưu lần cuối trong chu kỳ request hiện tại hay không.

The isDirty method

Như đã chỉ định trước đó, nó kiểm tra bất kỳ thuộc tính nào đã được thay đổi kể từ khi model được tải. Đây là cách bạn có thể sử dụng nó.

$post = Post::create([
    'title' => 'My title',
    'description' => 'Awesome description',
    'is_published' => false
]);

$post->isDirty(); 
// return `false` as any model attribute hasn't been changed yet

$post->is_published = true;

$post->isDirty(); 
// return `true` as `is_published` is changed.

$post->isDirty('title'); 
// returns `false` as `title` attirbute hasn't been changed yet

$post->isDirty('is_published'); 
// returns `true` as `is_published` is changed.

$post->save();

The isClean method

Phương thức isClean đối lập với phương thức isDirty kiểm tra xem các thuộc tính của model có “clean” hay không. Vì vậy, sử dụng isClean trong ví dụ trước sẽ trả về kết quả ngược lại với kết quả isDirty sẽ trả về.

$post = Post::create([
    'title' => 'My title',
    'description' => 'Awesome description',
    'is_published' => false
]);

$post->isClean();
// return `true` as any model attribute hasn't been changed yet

$post->is_published = true;

$post->isClean();
// return `false` as `is_published` is changed.

$post->isClean('title');
// returns `true` as `title` attirbute hasn't been changed yet

$post->isClean('is_published');
// returns `false` as `is_published` is changed.

$post->save();

Một điều cần lưu ý ở đây là, khi model được lưu, cả isDirtyisClean sẽ đánh dấu model instance lànot dirty” và “clean” tương ứng. Vì vậy, isDirty sẽ trả về falseisClean sẽ trả về true.

The wasChanged method

Vì vậy, khi bạn muốn biết liệu một thuộc tính có bị thay đổi “before saving” model hay không, bạn có thể sử dụng phương thức wasChanged. Đây là cách nó hoạt động.

$post = Post::create([
    'title' => 'My title',
    'description' => 'Awesome description',
    'is_published' => false
]);

$post->is_published = true;
$post->save();

$post->wasChanged();
// return `true` as `is_published` is changed.

$post->wasChanged('title');
// returns `false` as `title` attirbute hasn't been changed yet

$post->wasChanged('is_published');
// returns `true` as `is_published` is changed.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday