Доктрина 2: определение столбца ENUM не работает

Я хочу использовать ENUM в своем классе, но TINYINT в своей базе данных. Я читал эту статью: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/mysql-enums.html

В моей таблице Mysql:

CREATE TABLE `side` (
  `coated` tinyint(1) DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated',
);

В моем классе:

/**
 * @ORM\Column(type = "string", columnDefinition = "ENUM('coated', 'uncoated')")
 */
private $coated = null;

Запустив значения в PHP, я получаю реальное значение из базы данных:

0 or 1

Мне интересно, работает ли это решение с использованием Mysql. Надеюсь, что у меня есть решение, если это не сработает, единственное решение, которое я нахожу, это:

public function getCoated() {
  if ($this->coated === 0){
    return "uncoated";
  } elseif ($this->coated === 1) {
    return "coated";
  } else {
    return null;
  }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
355
1

Ответы 1

Вместо использования «TINYINT» я предлагаю использовать тип данных «BIT», чтобы база данных позволяла сохранять значения только как «0» или «1», чтобы быть в безопасности.

Ваш существующий:

CREATE TABLE `side` (
  `coated` tinyint(1) DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated'
);

Измените его на:

CREATE TABLE `side` (
  `coated` BIT DEFAULT NULL COMMENT '0 = Uncoated; 1 = Coated'
);

В «TINYINT» он также может принимать значения, отличные от 0/1, которые могут создать ошибку в вашем приложении, если кто-то обновит данные вашей таблицы до 2,3,4.

Спасибо за ответ. К сожалению, это не работает. При печати значений: для 0 он ничего не получает, для 1 он получает этот символ [Обновлено: я не могу вставить символ, но он похож на r]

ricreis394 02.07.2018 15:07

Другие вопросы по теме