// get currently used platform
$dbPlatform = $em->getConnection()->getDatabasePlatform();
// interpret BIT as boolean
$dbPlatform->registerDoctrineTypeMapping('bit', 'boolean');
namespace App\Type;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class BitType extends Type {
const BIT = "bit";
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) {
return self::BIT;
}
public function convertToPHPValue($value, AbstractPlatform $platform) {
return (int)$value; // alt. return decbin( $value);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform) {
return (int)$value; // alt. return bindec( $value);
}
public function getName() {
return self::BIT;
}
}
然后将其注册到doctrine.yaml中,如下所示:
doctrine:
dbal:
# [...] other configs here
types:
bit: App\Type\BitType
mapping_types:
bit: bit
5条答案
按热度按时间shyt4zoc1#
在配置yml中使用Map类型
9q78igpj2#
如果您使用
BIT
列来存储boolean
,请执行以下操作:现在,每当你把一个属性Map到位列时,教条2会把它的值解释为布尔值。
euoag5mw3#
您可以为Doctrine创建自己的自定义类型。
1.通过扩展
Doctrine\DBAL\Types\Type
类创建新类型。1.重写
convertToPHPValue()
和convertToDatabaseValue()
方法。1.注册新类型:
阅读更多关于Doctrine documentation pages的信息
ltqd579y4#
请按照以下步骤解决此问题:
1)在以下位置打开文件,如在Linux场景中,路径为:
var\www\html\admin\libraries\Composer\vendor\doctrine\dbal\lib\Doctrine\DBAL\Platforms\MySqlPlatform.php
2)转到此函数initializeDoctrineTypeMappings()
3)没有简单地添加您的Map的条目,就像在我的情况下,我Map位与布尔如下:
“位”=〉“布尔值”,
4)重新加载你的应用程序,它就会工作。
qq24tv8q5#
我建议使用整数或位字符串(尽管这不允许对它进行位操作)。
下面是一个完整的例子:
然后将其注册到
doctrine.yaml
中,如下所示: