To jest według dokumentacji na Doctrine2 na temat sposobu, aby wyczyścić pamięć podręczną. Nie jestem nawet pewien, czy tego właśnie chcesz, ale myślę, że to jest coś, co trzeba spróbować.
kierowca cache Doctrine2 zawiera różne poziomy usuwania pamięci podręcznej wpisy.
można usunąć poprzez bezpośrednie id, używając regex, przez przyrostek poprzez prefiks i równiny usuwając wszystkie wartości w pamięci podręcznej
Tak, aby usunąć wszystkie chcesz zrobić:
$deleted = $cacheDriver->deleteAll();
I usunąć przez prefiks, można zrobić:
$deleted = $cacheDriver->deleteByPrefix('users_');
nie jestem pewien, jak Doctrine2 nazwy identyfikatorów cache choć, więc trzeba by wykopać za to.
Informacja dotycząca usuwania pamięci podręcznej można znaleźć tutaj: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#deleting
Aby uzyskać sterownik pamięci podręcznej, można wykonać następujące czynności. Nie zostało to opisane w dokumentach, więc trochę prześledziłem kod.
Ja zakładając masz instancji menedżera podmiot w tym przykładzie:
$config = $em->getConfiguration(); //Get an instance of the configuration
$queryCacheDriver = $config->getQueryCacheImpl(); //Gets Query Cache Driver
$metadataCacheDriver = $config->getMetadataCacheImpl(); //You probably don't need this one unless the schema changed
Alternatywnie Chyba można zapisać wystąpienie cacheDriver w jakiejś klasie rejestru i pobrać go w ten sposób. Ale zależy od twoich preferencji. Osobiście staram się nie polegać zbytnio na rejestrach.
Inną rzeczą, jaką możesz zrobić, to powiedzieć zapytanie jesteś wykonującemu nie używać pamięci podręcznej wynik. Znowu nie sądzę, że to jest to, czego chcesz, ale po prostu je wyrzucasz. Głównie wydaje się, że równie dobrze możesz całkowicie wyłączyć pamięć podręczną zapytań. Jest tak, chyba że jest to tylko kilka konkretnych zapytań, w których nie chcesz używać pamięci podręcznej.
Ten przykład jest z docs: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#result-cache
$query = $em->createQuery('select u from \Entities\User u');
$query->useResultCache(false); //Don't use query cache on this query
$results = $query->getResult();
Czy chcesz całkowicie wyłączyć pamięć podręczną? Wiem, że możesz wyczyścić pamięć podręczną za pomocą $ deleted = $ cacheDriver-> deleteAll(); – Gohn67
@ Gohn67: Jak mogę uzyskać CacheDriver? –