我使用自定义学说类型,以便使用MySQL {ish)set
使用字段:
final class GenreSetType extends Doctrine\DBAL\Types\Type
{
private const TYPE_NAME = "genreSet";
public static $genres = [
"techno",
"dubstep",
"drumandbass",
"psytrance",
];
// [...]
/**
* @inheritdoc
*/
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
{
$genreSet = array_map(
function ($genre) {
return "'$genre'";
},
self::$genres
);
$genreSet = implode(", ", $genreSet);
$genreSet = sprintf("SET(%s)", $genreSet);
return $genreSet;
}
/**
* {@inheritdoc}
*/
public function requiresSQLCommentHint(AbstractPlatform $platform): bool
{
return true;
}
}
它按预期工作。但是,当我扩展流派的数组时,这种学说模式验证程序不会接受这种更改。这意味着doctrine:schema:validate
或doctrine:schema:update
或doctrine:migration:diff
都不会看到更改。
如果我手动删除(DC2Type:genreSet)
并运行这两个命令中的任何一个,它们确实可以正确提取更改并创建相应的SQL查询。
不幸的是,我将不得不使用此自定义字段从任何实体中手动删除评论。