19

我的数据库架构中有几个列具有位数据类型,但在Doctrine2映射时遇到问题。我不断得到:

请求的数据库类型位未知,Doctrine\DBAL\Platforms\MySqlPlatform可能不支持它。

附近有工作吗?我想把数据类型改为布尔型,只使用true和false语句,但这意味着我没有时间大规模地修改模式。

2

6个答案6

重置为默认值
38

在config.yml中使用mapping_types

教条:数据库:驱动程序:%%database_driver主机:%%database_host端口:%%database_port数据库名:%database_name%用户:%%database_user密码:%%database_password字符集:UTF8mapping_types(映射类型):位:布尔
1
  • 1
    它可以快速修复,但一点类型不是布尔值。所以当心你可能会在那里丢失一些信息。 评论 2016年6月27日13:36
12

如果您正在使用比特币列以存储布尔值,您可以这样做:

//获取当前使用的平台$dbPlatform=$em->getConnection()->getDatabasePlatform();//将BIT解释为布尔值$dbPlatform->registerDoctrineTypeMapping('bit','boolean');

现在,每次将属性映射到位列时,原则2都会将其值解释为布尔值。

7

您可以为Doctrine创建自己的自定义类型。

  1. 通过扩展创建新类型条令\DBAL\Types\Type类。
  2. 覆盖转换为PHP值()转换为数据库值()方法。
  3. 注册新类型:

    \Doctrine\DBAL\Types\Type::addType('abc','Your\\Custom\\Type\\AbcType');$dbPlatform=$em->getConnection()->getDatabasePlatform();$dbPlatform->registerDoctrineTypeMapping('abc','abc]);

阅读更多关于条令的内容文档页面

2
  • 你能建议我从哪里执行代码吗(从命令提示符?我在windows上):$dbPlatform=$em->getConnection()->getDatabasePlatform()$数据库平台->寄存器十进制类型映射('abc','abc'); 评论 2016年12月5日18:19
  • 1
    它应该在某种应用程序的bootstrap/db配置文件中,您可以访问数据库平台.
    – 克罗津
    评论 2016年12月6日12:11
2

请按照以下步骤解决此问题:

  1. 在以下位置打开文件,如在linux场景中,路径为:var\www\html\admin\libraries\Composer\vendor\doctrine\dbal\lib\doctrine\dbal\Platforms\MySqlPlatform.php
  2. 转到此函数initializeDoctrineTypeMappings()
  3. 现在只需添加映射项,就像我的例子中我用布尔值映射位一样,如下所示:
    “bit”=>“boolean”,
  4. 重新加载你的应用程序,它就会工作
0

我建议使用整数或位字符串(尽管这不允许您对其进行位操作)。

下面是一个完整的示例:

命名空间应用程序\类型;使用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;}}

然后注册教义.yaml这样地:

教条:数据库访问:#[…]此处的其他配置类型:位:App\Type\BitTypemapping_types(映射类型):bit:位
0

如果你在这里登陆是因为你正在进行一个拉拉维勒或拉拉维勒诺娃项目,并遇到了这个(或类似的错误),我可以将其添加到我的配置/数据库.php文件。

“dbal”=>[“类型”=>['timestamp'=>时间戳类型::类,“bit”=>布尔类型::类,],],

我在时间戳方面也有类似的问题,所以我也必须添加。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.