Quay lại
Invisible MySQL columns in Laravel

Hãy tưởng tượng một tình huống trong đó bạn có một bảng MySQL có tên là users và có một cột gọi là secret chứa một token bí mật cho người dùng tương ứng.

Làm thế nào bạn có thể ngăn cột này không xuất hiện khi ai đó truy vấn tất cả mọi thứ (tức là truy vấn SELECT *) từ bảng này? Một cách là chỉ định mỗi cột một cách rõ ràng trong truy vấn SELECT, trừ cột secret.

invisible columns là gì?

Hoặc nếu bạn đang sử dụng MySQL phiên bản 8.0.23 trở đi, bạn có thể xác định cột secret là "invisible". Một cột ẩn thường được ẩn đối với các truy vấn nhưng có thể truy cập nếu được tham chiếu một cách rõ ràng. Trước MySQL 8.0.23, tất cả các cột đều là hiển thị.

Dưới đây là cách bạn có thể định nghĩa một cột là ẩn khi tạo bảng.

CREATE TABLE users (
  id INT,
  secret TINYTEXT INVISIBLE
) ENGINE = InnoDB;

Hoặc khi bạn đang thay đổi bảng.

ALTER TABLE users ADD COLUMN secret TINYTEXT INVISIBLE;

Đây là cách để một cột trở thành "invisible". Như vậy, nó sẽ bị ẩn khỏi các truy vấn SELECT * trừ khi được tham chiếu một cách rõ ràng!

Invisible columns trong Laravel

Khả năng định nghĩa một cột là invisible không có trong Laravel schema cho đến khi phiên bản mới nhất của Laravel 8.x được phát hành.

Bây giờ, điều này là khả dụng bằng cách sử dụng phương thức mới là invisible() trên đối tượng Blueprint của bảng như sau.

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::table('users', function (Blueprint $table) {
    $table->string('secret')->nullable()->invisible();
});

Invisible columns sử dụng trong model

protected $hidden = ['secret']

Trong Laravel, protected $hidden = ['secret'] là một thuộc tính trong model Eloquent được sử dụng để ẩn các trường cụ thể khi chuyển đổi đối tượng thành dạng JSON. Khi một model Eloquent được chuyển đổi thành JSON (thông qua các phương thức như toJson() hoặc khi trả về dữ liệu JSON từ API), các trường được liệt kê trong mảng $hidden sẽ không xuất hiện trong kết quả JSON.

Trong ví dụ này, protected $hidden = ['secret'] định nghĩa rằng khi đối tượng của model chứa một cột tên là secret, thì khi chuyển đổi thành JSON, cột này sẽ không được bao gồm trong kết quả JSON trả về. Điều này giúp bảo vệ thông tin nhạy cảm, như các thông tin mật khẩu hoặc thông tin không muốn được hiển thị công khai.

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