Doctrine orm 原则2在刷新时生成空id

Doctrine orm 原则2在刷新时生成空id,doctrine-orm,flush,persist,string,Doctrine Orm,Flush,Persist,String,关于stackoverflow的第一个问题,有点紧张。 因此,情况如下: 我把条令2用于一个网站。我使用我的应用程序中良好的libs和良好的路径,在没有pear的情况下正确地安装了它。我在开始编写代码之前创建了数据库,所以我使用反向工程方法(doctrine exporter)创建了映射(xml和yml,以防万一)。生成的映射很好,然后我自己编写了实体文件(控制台没有工作) 现在我正试图向数据库中插入一些内容,但遇到了一个小问题: 当会员尝试注册时,他会填写一些信息(登录名、密码等)。我做每一次


关于stackoverflow的第一个问题,有点紧张。

因此,情况如下: 我把条令2用于一个网站。我使用我的应用程序中良好的libs和良好的路径,在没有pear的情况下正确地安装了它。我在开始编写代码之前创建了数据库,所以我使用反向工程方法(doctrine exporter)创建了映射(xml和yml,以防万一)。生成的映射很好,然后我自己编写了实体文件(控制台没有工作)

现在我正试图向数据库中插入一些内容,但遇到了一个小问题: 当会员尝试注册时,他会填写一些信息(登录名、密码等)。我做每一次测试,看看信息是否正确,如果正确,我会创建一个新的对象成员,用每个给定的信息填充并自动生成一个,然后对对象调用persist(),然后调用flush()

我在查看数据库时有些惊讶,看到填充的ID等于“”(空字符串),而不是$login。 所以这就是我的问题:这怎么可能?是不是因为我在冲水之前没有填满会员的所有财产?或者没有提供实体之间关系的信息(一对多、多对多、多对一)?还是别的什么?这个问题我已经研究了一个星期了,我想不出来

有关信息:

  • $status、$lang、$country是外键
  • $article和$filter是多对多关系

谢谢你的阅读,(我希望)谢谢你解释我的错误。

你必须像这样使用flush:

$doctrineManager->flush();
之后,您可以通过以下方式访问id:

$newmember->getId();

事实上,$idarticles和$IDFilter是许多关系,我没有具体说明。在构建对象时,可能条令2无法根据映射构建对象

因此构造函数如下所示:

public function __construct()
{
    $this->idfilters = new \Doctrine\Common\Collections\ArrayCollection();
    $this->idarticle = new \Doctrine\Common\Collections\ArrayCollection();
    $this->activated = false;
}

每个人都必须获得阵列集合才能工作。

我尝试了你的解决方案,但没有改变任何事情。id仍然为空(int 0带有
var\u转储($newMember->getLogin());
)。我认为问题在于持久性,而不是刷新,因为当Doctrine在我的数据库中添加行时,登录名是空的。请像这样更改您的标识注释(您必须更改列名等):/***@var integer$id*@column(name=“id”,type=“integer”,nullable=false)*@id*@GeneratedValue(strategy=“identity”)*/私人$id;我照你说的做了,请求别人为我生成实体,现在一切正常!非常感谢你们两位。
$newmember->getId();
public function __construct()
{
    $this->idfilters = new \Doctrine\Common\Collections\ArrayCollection();
    $this->idarticle = new \Doctrine\Common\Collections\ArrayCollection();
    $this->activated = false;
}