原则2:columnDefinition ENUM不起作用

时间:2018-07-02 12:37:00

标签: php mysql doctrine-orm

我想在班级中使用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;
  }
}

1 个答案:

答案 0 :(得分:1)

我建议不要使用“ TINYINT”数据类型,这样数据库将只允许将值“ 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”中,如果有人将您的表数据更新为2,3,4,它也可以接受0/1以外的值,这些值可能会在您的应用程序中造成错误。