Doctrine orm 第2条oracle日期时间列显示;不是有效月份”;关于插入实体

Doctrine orm 第2条oracle日期时间列显示;不是有效月份”;关于插入实体,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我正在从事一个项目,我们正在使用Zend 2和doctrine 2与oracle数据库。 我的实体有一个datetime类型的字段create_date。我的实体如下 class Personnel { /** * @ORM\Column(type="string",unique=true, nullable=false) */ protected $login_name; /** * @ORM\Column(type="datetime") */ protected $create_

我正在从事一个项目,我们正在使用Zend 2和doctrine 2与oracle数据库。 我的实体有一个datetime类型的字段create_date。我的实体如下

class Personnel
{

/**
 * @ORM\Column(type="string",unique=true, nullable=false)
 */
protected $login_name;
/**
 * @ORM\Column(type="datetime")
 */
protected $create_date;
public function __construct()
{
    $this->create_date = new \DateTime("now");
}

 public function get_login_name()
{
    return $this->login_name;
}

public function set_login_name($login_name)
{
    $this->login_name = $login_name;
}
}

我正在用

$user = new Personnel();
$user->set_login_name('Admin');
$this->getEntityManager()->persist($user);
$this->getEntityManager()->flush();
但是显示出一个错误

SQLSTATE[HY000]: General error: 1843 OCIStmtExecute: ORA-01843: not a valid month (ext\pdo_oci\oci_statement.c:148) SQLSTATE[HY000]:一般错误:1843 OCISMTEXECUTE:ORA-01843:不是有效月份 (ext\pdo_oci\oci_statement.c:148) 请帮帮我


高级thx在这里也发现了这个bug。。。这是OracleSessionInit没有被呼叫

但我不知道这是一个缺少的配置部分,还是一个doctrine中的bug,如果您使用oci8,默认情况下不启用它

编辑:

刚刚找到它!我应该补充一点,您应该在服务管理器的invokers中添加一个指向\doctor\DBAL\Event\Listeners\OracleSessionInit的服务,所以它应该是这样的:

'invokables' => array(
    'oracle-session-init' => '\Doctrine\DBAL\Event\Listeners\OracleSessionInit'
),
这是:

'doctrine' => array (
    'driver' => array (
            /** here are your driver settings, such as annotations configs */
    ),
    'eventmanager' => array(
            'orm_default' => array(
                    'subscribers' => array('oracle-session-init')
            )
    )
),
归功于:
默认情况下,即使使用OCI8,条令也不会调用它。在我看来,这不是一个bug,因为有了它,您可以直接在DB中更改NLS参数,这样,您就不必每次连接OracleSessionInit时都调用它了。导致每个会话减少1个查询。:)

解决此问题的另一种方法是获取\doctor\ORM\EntityManager的实例 并设置OracleSessionInit,如下所示您还可以像我在本例中那样更改默认会话变量,将具有新值的数组传递给“NLS\U SORT”。

Module.php

public function getServiceConfig() {
    return array(
        'initializers' => array(
            function($instance, $services) {
                if ($instance instanceof \Doctrine\ORM\EntityManager) {
                    $instance->getEventManager()->addEventSubscriber(new \Doctrine\DBAL\Event\Listeners\OracleSessionInit(array(
                        'NLS_SORT' => 'WEST_EUROPEAN_AI',
                    )));
                }
            },
        ),
    );
}
初始化器:每次ServiceManager创建类的新实例时执行的回调。如果一个类实现了一个特定的接口,那么这些通常用于将一个对象注入到新的类实例中


有关初始值设定项和Zend\ServiceManager配置的更多信息。

看起来更像是一个bug,而不是一个问题。你试过最新的大师吗?您是否尝试与您的供应商一起运行测试套件?@Ocramius,是的,我正在使用最新的masterTry运行测试套件,并最终在www.doctor-project.org/jira/上报告问题。还要检查您的模式是否与映射同步。请注意,我也有同样的问题,但我不知道应该在哪里配置,我正在将Yii与条令2一起使用,请帮助