【问题标题】:Is there a way to pass a SQL expression as a entity field value in Doctrine2?有没有办法将 SQL 表达式作为 Doctrine2 中的实体字段值传递?
【发布时间】:2011-10-18 14:41:12
【问题描述】:

有没有办法做这样的事情:(愚蠢的代码)

$entity = new Entity\SomeEntity();

$entity->mappedField = new SQLExpression('SOME SQL CODE HEARE');

$entityManager->persist($entity);
$entityManager->flush();

?

[编辑] 我想在 Oracle tablespace.sequence_name.next 值中插入序列中的 ID,我知道这可以从触发器中完成,但我的访问用户无法在我的环境中创建触发器。

【问题讨论】:

  • 你的 SQL 代码是什么?也许有更好的方法来做到这一点,Doctrine 在这里为您的数据库提供抽象,您不应该在这里编写原始 SQL。

标签: php sql doctrine-orm


【解决方案1】:

如果你问一个关于你想要实现的事情的问题会更有效。

据我所知,这行不通,Doctrine2 在将域模型与持久层混合方面非常奇特。这会将您的域层耦合到您的持久层。

你想要达到什么目的?最好使用事件侦听器,但我不确定您要解决什么问题。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    您必须记住 Doctrine2 实体映射 SQL 字段。每种数据类型都需要映射到您的数据库。

    字符串变成 varchar 或 blob,整数变成 int 等等。对象没有对应的数据类型,但有一个例外:关系!作为对象关系数据映射器原则可以将对象(实体或实体集合)映射到相关表,如果您定义的话。您真的应该更深入地了解 Doctrine 为您提供的功能,如official tutorial 中所述。

    【讨论】:

      【解决方案4】:

      答案是在教义2 中是不可能的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        相关资源
        最近更新 更多