尝试在Symfony中运行doctrine:schema:update
时遇到上述错误。
该错误在AbstractPlatform(\ lib \ Doctrine \ Platforms \ AbstractPlatform的一部分)中发生
我正在检查,并且JSON肯定已在\ lib \ Doctrine \ DBAL \ Types \ Type.php中注册
abstract class Type
{
const TARRAY = 'array';
const SIMPLE_ARRAY = 'simple_array';
const JSON_ARRAY = 'json_array';
const JSON = 'json';
...
}
MySQL的版本是5.7.26,所以应该可以(json是这里的类型)
我只是想找出一种解决方法。
我尝试添加
doctrine:
dbal:
types:
enum: json
至doctrine.yaml
但是没有效果。有谁知道解决方法?我不知道json文件在哪里被调用...
编辑:我在这里遇到过类似的情况,但答案是针对Laravel: "Unknown database type json requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it." while running php artisan migrate command
有人知道如何为Symfony实施此功能吗?
答案 0 :(得分:1)
确保您的dbal配置指向正确的服务器版本:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: utf8mb4
server_version: 5.7
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
engine: InnoDB
答案 1 :(得分:0)
怎么样
enum: Doctrine\DBAL\Types\JsonType
答案 2 :(得分:0)
对于那些感兴趣的人,这是我在这里遇到的一个骇人解决方法https://github.com/doctrine/orm/issues/6540
在AbstractPlatform中,我刚刚修改了错误检查以将json文件转换为字符串。不理想,但是已经克服了这个错误。
public function getDoctrineTypeMapping($dbType)
{
if ($this->doctrineTypeMapping === null) {
$this->initializeAllDoctrineTypeMappings();
}
$dbType = strtolower($dbType);
//inserted hack here
if($dbType == 'json') {
$dbType = 'string';
}
//
if (!isset($this->doctrineTypeMapping[$dbType])) {
throw new \Doctrine\DBAL\DBALException("Unknown database type ".$dbType." requested, " . get_class($this) . " may not support it.");
}
return $this->doctrineTypeMapping[$dbType];
}