Ich habe eine Anwendung in Symfony mit mongodb, wo ich eine Anwendung immer als Server ausgeführt haben. Wenn ich versuche, Objekte aus der Datenbank abzurufen, erhalte ich die neuen Werte des Objekts nicht. Ist wie Doktrin die Objekte zwischenspeichert und obwohl es andere Prozesse gibt, die die Datenbank aktualisiert, sieht meine Anwendung die Änderungen nicht, und immer das erste Objekt, das abgerufen wird, wird zurückgegeben.Symfony Doktrin Force immer Abfrage der Datenbank
Als Test habe ich zwei Prozesse programmiert, einer schreibt Werte und der andere liest diese Werte, wie Sie sehen können, sieht der Leser immer den gleichen Wert. Diese
ist der Code der beiden Prozesse:
class SetterCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('delfos:setter')
->setDescription('Sets value');
}
protected function execute(InputInterface $input, OutputInterface $output){
$em = $this->getContainer()->get('doctrine_mongodb')->getManager();
$element = $em->getRepository('DelfosBundle:TestDoc')->findOneById("46e05892b50334e0badbb8cac9a076a7");
$i = 0;
while(true){
$element->setIndex($i);
$em->persist($element);
$em->flush();
echo "Setting value to ".$i.PHP_EOL;
$i++;
sleep(2);
}
}
}
class GetterCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('delfos:getter')
->setDescription('Gets value');
}
protected function execute(InputInterface $input, OutputInterface $output){
$em = $this->getContainer()->get('doctrine_mongodb')->getManager();
while(true){
$element = $em->getRepository('DelfosBundle:TestDoc')->findOneById("46e05892b50334e0badbb8cac9a076a7");
echo "Current value ".$element->getIndex().PHP_EOL;
sleep(2);
}
}
}
/**
* @MongoDB\Document
*/
class TestDoc
{
/**
* @MongoDB\Id(strategy="UUID")
*/
protected $id;
/**
* @MongoDB\Int
*/
protected $index;
...
}
Wie kann ich Lehre in diesem Prozess zwingen, immer die Datenbank abfragen?
'$ entityManager-> detach ($ object); –
Das macht keinen Sinn - Sie erhalten ein Element wie dieses (immer die gleiche Abfrage)' $ element = $ em-> getRepository ('DelfosBundle: TestDoc') -> findOneById ("46e05892b50334e0badbb8cac9a076a7"); 'und ein anderes Ergebnis erwarten? – pavlovich
$ entityManager-> detach ($ object) woks korrekt, aber es gibt keine Möglichkeit, es automatisch zu tun? –