Я хочу использовать 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;
}
}






Вместо использования «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]