有没有办法做这样的事情:(哑代码)
$entity = new Entity\SomeEntity();
$entity->mappedField = new SQLExpression('SOME SQL CODE HEARE');
$entityManager->persist($entity);
$entityManager->flush();
[编辑]
我想在Oracle tablespace.sequence_name.next
值中插入序列中的ID,我知道这可以通过触发器完成,但是我的访问用户无法在我的环境中创建触发器。
答案 0 :(得分:1)
如果你问一个关于你想要实现的事情的问题,那将会更有效。
据我所知,这不起作用,Doctrine2对于将域模型与持久层混合非常特殊。这会将您的域图层与您的持久层相结合。
你想要达到的目标是什么?尽管我不确定你要解决的问题是什么,但你可能最适合使用事件监听器。
答案 1 :(得分:0)
无需,Doctrine可以自行处理Oracle序列,请参阅http://www.doctrine-project.org/docs/orm/2.0/en/reference/basic-mapping.html#identifier-generation-strategies。
另见Doctrine2 doesen't set sequence to default for id column (postgres)。
答案 2 :(得分:0)
您必须记住Doctrine2实体映射SQL字段。每种数据类型都需要可以映射到您的数据库。
String变为varchar或blob,整数变为int等。对象没有相应的数据类型,但有一个例外:关系!作为对象关系数据映射器,Doctrine可以将Object(Entity或EntityCollection)映射到相关表(如果由您定义)。您真的应该深入了解Doctrine为您定义这些功能的能力,如official tutorial中所述。
答案 3 :(得分:0)
对于doctrine2
,答案是不可能的