我在这件事上失去了3个小时,仍然无法弄清楚什么是错的,我试图添加一个VARBINARY字段类型,并且教义在生成新实体时向我显示该字段作为选项,但问题是当我做{ {1}}然后它给了我一个错误,
php app/console doctrine:schema:update --force
这是我的VARBINARY类型
[DoctrineDBAL\DBALException]
An exception occured while executing 'CREATE TABLE Test (id INT AUTO_INCREMENT NOT NULL, name VARBINARY NOT NULL, PRIMARY KEY(id))
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right sytax to use near 'NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci EN' at line 1
我也在启动功能
中注册了它 use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class VarBinaryType extends Type {
const VARBINARY = 'VARBINARY';
public function getName()
{
return self::VARBINARY;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) {
return $platform->getDoctrineTypeMapping('VARBINARY');
}
public function convertToDatabaseValue($value, AbstractPlatform $platform) {
return ($value === null)? null : base64_encode($value);
}
public function convertToPHPValue($value, AbstractPlatform $platform) {
return ($value === null)? null : base64_decode($value);
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
结合moonwave99的建议,这是一个解决方案。
在VarBinaryType类中,将此代码用于getSQLDeclaration函数:
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) {
if(isset($fieldDeclaration['length'])){
return "VARBINARY (".$fieldDeclaration['length'].")";
}else{
return "VARBINARY (1024)";
}
}
我通过浏览源代码找到了这个答案,这比文档更有帮助。使用上面的代码适用于MySQL。根据您的实现,您可能需要针对您正在使用的数据库平台进行调整。
我在这里发布这个帖子,供那些正在寻找有关旧版Doctrine的解决方案的人使用。最新版本目前支持BINARY和VARBINARY类型。