在 Doctrine 2 中加载/保存字段时透明地执行 SQL 函数

Posted

技术标签:

【中文标题】在 Doctrine 2 中加载/保存字段时透明地执行 SQL 函数【英文标题】:Transparently executing SQL functions when loading/saving a field in Doctrine 2 【发布时间】:2011-12-07 16:41:07 【问题描述】:

我正在使用 Doctrine2,并且有一个包含字符串属性的实体,该属性表示 WKT 几何:

class Entity 
    /** @Column(type="string") */
    protected $wkt;

我希望将此字段透明地保存到数据库中的 GEOMETRY 字段中,如下所示:

INSERT INTO ... VALUES(GeomFromText(?))
SELECT AsText(field) FROM ...

我查看了custom mapping types,但找不到在哪里应用这样的 SQL 函数。

有什么想法吗?

【问题讨论】:

澄清一下,您希望在修改另一个字段时更新数据库中的一个字段?我对 Doctrine 不太熟悉,但您可能可以使用 triggers。 不,实际上我只需要在持久化/水合实体时在 WKT(文本)和几何(二进制)之间进行透明转换!数据库使用 GeomFromText() 和 AsText() SQL 函数来处理。 【参考方案1】:

也许你可以看看LifecycleCallbacks:

/**
 * @PrePersist
 */
public function sendOptinMail() 
    //do sql query : SELECT GeoFromText()...
    $this->yourField = ...

然后将字段设置为返回值。

【讨论】:

这意味着在我的模型中注入数据库,这是我想避免的......并且没有提供检索值的解决方案!【参考方案2】:

刚刚发现这个功能目前还没有实现,但是确实存在一个功能请求:

http://www.doctrine-project.org/jira/browse/DBAL-15

它可能在 Doctrine 2.2 中可用

更新:此功能已在 2.2 中得到确认,即将发布 soon。

更新:现在在 Doctrine 2.2 中可用!

【讨论】:

以上是关于在 Doctrine 2 中加载/保存字段时透明地执行 SQL 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Photoshop JavaScript API 中加载图层透明度并保存为路径?

在 MATLAB 中加载对象

在赛普拉斯测试中加载页面后,如何可靠地等待 XHR 请求?

在页面加载时在输入字段中加载 innerHTML 数据

在 WPF 中加载/保存 RTF 时保留字体大小

在 Doctrine 2 中指定十进制字段类型时,比例和精度是啥意思?