请求的数据库类型位未知,Doctrine\DBAL\Platforms\MySqlPlatform可能不支持它。
-
1 相似的答案 启用ENUM – 杰克·伯杰 评论 2013年9月5日9:17 -
2 有点晚了,但Doctrine建议对mysql的布尔类型使用tinyint( docs.doctrine-project.org/projects/doctrine-dbal/en/latest/… ). 您可以将位列转换为tinyint吗? – BigJ公司 评论 2017年11月1日23:05
6个答案
//获取当前使用的平台 $dbPlatform=$em->getConnection()->getDatabasePlatform(); //将BIT解释为布尔值 $dbPlatform->registerDoctrineTypeMapping('bit','boolean');
通过扩展创建新类型 条令\DBAL\Types\Type 类。 覆盖 转换为PHP值() 和 转换为数据库值() 方法。 注册新类型: \Doctrine\DBAL\Types\Type::addType('abc','Your\\Custom\\Type\\AbcType'); $dbPlatform=$em->getConnection()->getDatabasePlatform(); $dbPlatform->registerDoctrineTypeMapping('abc','abc]);
在以下位置打开文件,如在linux场景中,路径为: var\www\html\admin\libraries\Composer\vendor\doctrine\dbal\lib\doctrine\dbal\Platforms\MySqlPlatform.php 转到此函数 initializeDoctrineTypeMappings() 现在只需添加映射项,就像我的例子中我用布尔值映射位一样,如下所示: “bit”=>“boolean”, 重新加载你的应用程序,它就会工作
命名空间应用程序\类型; 使用Doctrine\DBAL\Types\Type; 使用Doctrine\DBAL\Platforms\AbstractPlatform; 类BitType扩展类型{ public const BIT=“位”; 公共函数getSQLDeclaration(array$fieldDeclation,AbstractPlatform$platform){ 返回自身::自检; } 公共函数convertToPHPValue($value,AbstractPlatform$platform){ if(is_null($value)){ 返回$value; } return(int)$value;// alt.返回decbin($value); } 公共函数convertToDatabaseValue($value,AbstractPlatform$platform){ if(is_null($value)){ 返回$value; } return(int)$value;// alt.返回bindec($value); } 公共函数getName(){ 返回静态::BIT; } }
教条: 数据库访问: #[…]此处的其他配置 类型: 位:App\Type\BitType mapping_types(映射类型): bit:位
“dbal”=>[ “类型”=>[ 'timestamp'=>时间戳类型::类, “bit”=>布尔类型::类, ], ],