Symfony2自定义学说类型

时间:2014-07-20 20:54:40

标签: php sql-server-2008 symfony doctrine-orm doctrine

我需要为我的数据库创建一个新的Symfony2 / Doctrine类型 我们称之为dbmd5。我已经在mssql server 2008中有一个可用的自定义函数

myfunc(arg1, arg2)

现在我需要使用代表我实体中不同列的两个参数自动调用doctrine。就像电子邮件和用户名一样。 我需要脚本来调用它

myfunc(email, username);

我如何将“用户名”链接到我给“电子邮件”

这种类型

实体中的列声明

/**
 * @ORM\Column(type="dbmd5")
 */
protected $email;

我还创建了自定义类型并将其添加到了类型池中 我的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;
}

1 个答案:

答案 0 :(得分:0)

我的溶解

添加到实体:

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);
} 

它非常凌乱,只能满足我的需求。 如果你给我有效的建议,我愿意改进我的代码。

致以最诚挚的问候,