Frage

Ich versuche einen einfachen Referenzon mit MongoDB/Doctrine zu machen, aber ich bekomme ein wirklich seltsames Problem:

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

Wie Sie hier sehen können, erstelle ich ein Privileg -Objekt, bei dem ich auf einen Benutzer Bezug habe, ich bestehe alles in Ordnung. Nein, ich erstelle ein Ereignisobjekt, ich habe das Privileg eingebettet, überprüfe die ID => alles in Ordnung.

Jetzt spüle ich es und der Benutzer-> ID wird verändert, ich habe keine Ahnung, warum das passiert.

Ich habe versucht, die Kaskade zu entfernen, um zu sehen, wie es sich verhält, und ich habe einfach einen Null $ id.

Jede Hilfe wäre herzlich willkommen zu verstehen, was ich falsch mache!

Hier ist der Code, den ich verwende:

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;
}

Beschnittene Einheiten:

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;
}
}
War es hilfreich?

Lösung

Aus irgendeinem Grund funktioniert der Code hier unter Symfony2 vollkommen in Ordnung.

Das Problem kommt von der Art und Weise, wie ich die Doktrin in Zend (modifiziertem Bisna) implementiert habe - diese Frage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top