2011-09-06 27 views
0

我试图做的MongoDB /学说简单ReferenceOne,但我 得到一个非常奇怪的问题:主义ODM/PHP/MongoDB的 - ReferenceOne ID更改或刷新归零时

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 

,你可以看到这里,我创建一个特权对象,我参考了一个 用户,我坚持它=>一切都好。不,我创建了一个事件对象,我在其中嵌入了 权限,请检查id =>一切正常。

现在我刷新它,并且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; 
} 
} 

回答

0

出于某种原因,这里的代码工作下的Symfony2完美的罚款。

这个问题来自于我在Zend中实现原理的方式(修改后的Bisna) - 关闭了这个问题。