DevGang
Авторизоваться

Невидимые столбцы MySQL и как их определить с помощью Laravel и Doctrine

Многие разработчики не знают, что MySQL теперь поддерживает невидимые столбцы.

Но что такое невидимый столбец?

Когда это происходит?

Этот атрибут доступен в MySQL начиная с версии 8.0.23. Согласно документации:

Невидимый столбец обычно скрыт для запросов, но к нему можно получить доступ, если на него явно есть ссылка. До MySQL 8.0.23 все столбцы были видимы.

Синтаксис создания невидимого столбца очень прост:

create table employees (
    id int not null primary key auto_increment,
    name varchar(45) not null,
    ssn char(11) not null INVISIBLE
) ENGINE = InnoDB;

Конечно, мы можем использовать DDL для переключения столбца между видимым и невидимым.

alter table employees alter column ssn set visible;

Запрос данных

А что произойдет, если я выполню select * from employees?

Ого, где моя колонка SSN? Ну оно спрятано 🙂! Чтобы получить этот столбец, нам нужно явно указать его в нашем запросе:

Это хороший подход для исключения столбцов, которые не нужно отображать в нашем запросе, например тех, которые содержат конфиденциальные данные.

Создание невидимого столбца с помощью миграции Laravel

Если вы хотите использовать эту функцию в приложении Laravel, вы можете определить свой столбец следующим образом:

public function up(): void
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('name', 45);
        $table->char('ssn', 11)->invisible();
    });
}

Создание невидимого столбца с помощью Doctrine

Я определил сущность под названием Employee со следующей конфигурацией

#[ORM\Entity]
#[ORM\Table(name: 'employees')]
class Employee
{
    #[ORM\Id]
    #[ORM\Column(type: 'integer')]
    #[ORM\GeneratedValue]
    private int | null $id;

    #[ORM\Column(type: 'string', length: 45)]
    private string $name;

    #[ORM\Column(columnDefinition: 'char(11) INVISIBLE')]
    private string $ssn;

    // The other methods of this entity
}

Теперь у нас есть дополнительный уровень безопасности, предотвращающий раскрытие наших конфиденциальных данных!

Вот и все, ребята! Увидимся в следующем посте 🙂 👍🏻

Источник:

#PHP #MySQL
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу