Doctrine ODM / PHP / MongoDB - ReferenceOne ID在刷新时更改或为空


Doctrine ODM / PHP / MongoDB - ReferenceOne ID changed or nulled when flushed

我想做一个简单的参考与MongoDB/学说,但我得到一个非常奇怪的问题:

My ID:4e63611cbc347053a2000001
Create the Privilege Object
Check what's the Privilege->User Id
4e63611cbc347053a2000001
Persist it
Create the Event Object
Persist it
Check what's the Event->Privilege->User Id
4e63611cbc347053a2000001/OK/0
Flush it
Get my document id
4e6546d6bc34700605000012
Check what's the Event->Privilege->User Id
4e6546d6bc34700605000013/NOK/0

正如您在这里看到的,我创建了一个特权对象,并在其中引用了a用户,我坚持它=> ok。不,我创建一个事件对象,嵌入权限在里面,检查id =>所有ok

现在我冲洗它,并且user->id被更改,我不知道为什么会这样发生。

我试着删除级联,看看它是如何表现的,我只是结束使用空$id。

欢迎任何帮助来了解我做错了什么!

下面是我使用的代码:
echo "My ID:".$identity->getId()."<br />";
echo "Create the Privilege Object<br />";
$privilege = new 'Entity'ODM'Event'Privilege();
$privilege->setUser($identity);
$privilege->setRole("admin");
echo "Check what's the Privilege->User Id<br />";
echo $privilege->getUser()->getId()."<br />";
echo "Persist it<br />";
$dm->persist($privilege);
echo "Create the Event Object<br />";
$event = new 'Entity'ODM'Event();
$event->setName("My Event 222");
$event->setDate("25/08/2012");
$event->setUrl("myevent222");
$event->addPrivilege($privilege);
echo "Persist it<br />";
$dm->persist($event);
echo "Check what's the Event->Privilege->User Id<br />";
   $privs = $event->getPrivileges();
$output = $identity->getId();
$i = 0;
foreach($privs as $priv)
{
    if($priv->getUser()->getId() == '4e63611cbc347053a2000001')
        $output .= "/OK/".$i."<br />";
    else
        $output .= "/NOK/".$i."<br />";
    $i++;
    echo $output;
}
echo "Flush it<br />";
$dm->flush();
echo "Get my document id<br/>";
$id = $event->getId();
echo $id."<br/>";
$privs = null;
$priv = null;
echo "Check what's the Event->Privilege->User Id<br />";
   $privs = $event->getPrivileges();
$output = $identity->getId();
$i = 0;
foreach($privs as $priv)
{
    if($priv->getUser()->getId() == '4e63611cbc347053a2000001')
        $output .= "/OK/".$i."<br />";
    else
        $output .= "/NOK/".$i."<br />";
    $i++;
    echo $output;
}

修剪实体:

class Event {
    /**
     * @Id
     */
    protected $id;
    /**
     * @EmbedMany(targetDocument="'Entity'ODM'Event'Privilege")
     */
    protected $privileges = array();
}
class Privilege {
/**
* @Id
*/
protected $id;
    /**
     * @ReferenceOne(targetDocument="'Entity'ODM'User",
cascade={"persist"})
     */
    protected $user;
/**
 * @param field_type $user
 */
public function setUser('Entity'ODM'User $user) {
    $this->user = $user;
}
}

由于某些原因,这里的代码在symfony2下工作得很好。

问题来自于我在Zend(修改Bisna)中实现教条的方式-结束这个问题