在 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 函数的主要内容,如果未能解决你的问题,请参考以下文章