【问题标题】:Symfony2 Custom Doctrine TypeSymfony2 自定义准则类型
【发布时间】:2014-07-20 20:54:39
【问题描述】:

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

myfunc(arg1, arg2)

现在我需要使用代表我的实体中不同列的两个参数来自动调用教义。例如电子邮件和用户名。 我需要脚本来调用它

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

【问题讨论】:

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


    【解决方案1】:

    我的解决方案

    添加到实体:

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

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

    最好的问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      相关资源
      最近更新 更多