我正在尝试在symfony2项目中使用带有oracle 10g数据库的doctrine。
一切正常但是当我尝试在表中插入一个带日期列的行时,我收到以下错误:
[PDOException] SQLSTATE [HY000]:常规错误:1850 OCIStmtExecute: ORA-01850:ORA-01850:小时必须介于0到23之间 (分机\ PDO_OCI \ oci_statement.c:148)
根据How to use Doctrine OracleSessionInit listener with Symfony2?,可以通过将Doctrine \ DBAL \ Event \ Listeners \ OracleSessionInit类添加到Doctrine中的事件管理器来修复此错误。
app/config/config.yml
services:
my.listener:
class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
tags:
- { name: doctrine.event_listener, event: postConnect }
我试过这个解决方案,但它对我没用。所以我通过我的控制器手动将监听器添加到了docManager中的eventManager:
public function indexAction()
{
$product= new Product();
$product->setCreationDate(new \DateTime());
$this->getDoctrine()->getConnection()->getEventManager()->addEventSubscriber($this->get('my.listener'));
$em->persist($product);
$em->flush();
return array();
}
这是有效的,但这不是很优雅,我不想用我的所有控制器做到这一点......
所以我的听众似乎正常工作。在我看来,postConnect事件永远不会被触发,或者我的config.yml是错误的,并且没有正确设置监听器。
非常感谢一些帮助。
谢谢。
答案 0 :(得分:0)
谢谢m2mdas。我能够根据你的建议调试事件管理器,我发现我的监听器没有列出。所以我再次检查了我的config.yml,结果发现它没有很好地形成(缺少2个空白字符)。
无论如何,现在一切都很好,非常感谢你的帮助。