我需要为我的数据库创建一个新的Symfony2/Doctrine类型我们将其命名为dbmd5。我已经有一个工作的自定义函数在mssql server 2008
myfunc(arg1, arg2)
现在我需要用两个参数来表示我的实体中的不同列来自动调用doctrine。比如电子邮件和用户名。我需要脚本将其命名为
myfunc(email, username);
如何将"username"链接到我给"email"的这个类型
实体中的列声明
/**
* @ORMColumn(type="dbmd5")
*/
protected $email;
我还创建了自定义类型并将其添加到Types池中我的convertToDatabaseValueSQL:
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform) {
$usernameColumn = '';//how do i get the username value>
$value = sprintf('[dbo].[myfunc](%s, %s)', $sqlExpr, $usernameColumn);
return $value;
}
我的解决方案
添加到实体:
protected static $stored = array();
public function store($name)
{
self::$stored[$name] = $this;
}
public static function stored($name)
{
return self::$stored[$name];
}
在控制器中初始化实体
$entity = new Entity();
在实体管理器中持久化实体之前,存储数据
$entity->store('storeName');
在dbmd5类型声明中添加
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform) {
$entity = Entity::stored('storeName');
return sprintf("[dbo].[myfunc](?, '".addslashes($entity->username)."')", $sqlExpr);
}
它非常乱,它只满足我的需要。如果你给我有效的建议,我愿意改进我的代码。
问好,