49

I need to clear my doctrine's cache in Symfony.

There must be some way in command line for clear the cache.

Or where should I find and delete the files belonging to cache?

Blackbam
  • 17,496
  • 26
  • 97
  • 150
morteza kavakebi
  • 1,640
  • 3
  • 18
  • 39

7 Answers7

140

For Symfony 3+:

 php bin/console

will list all commands, the following are relevant for cache:

 php bin/console doctrine:cache:clear-metadata 
 php bin/console doctrine:cache:clear-query  
 php bin/console doctrine:cache:clear-result

Before Symfony 3:

app/console

will list how you can do it

 app/console doctrine:cache:clear-metadata 
 app/console doctrine:cache:clear-query  
 app/console doctrine:cache:clear-result 
Martijn
  • 15,791
  • 4
  • 36
  • 68
amitchhajer
  • 12,492
  • 6
  • 40
  • 53
  • By the way, if you are using mongodb for example you can do 'app/console doctrine:mongodb:cache:clear-metadata' or just do 'app/console doctrine' and you will see all available options – Gigala Apr 16 '13 at 10:55
  • 3
    Note that you can always use `app/console list` to show all commands or `app/console list doctrine` to just show commands in the 'doctrine' namespace – caponica May 07 '14 at 13:30
  • 2
    I tried `doctrine:cache:clear-result` in prod environment. It is not working. I also tried `bin/doctrine orm:clear-cache:result`. It doesn't work either. I'm using `memcache`. – Sithu Oct 06 '15 at 02:39
11

If you want to do it within your code (from Doctrine's documentation) :

If you simply want to delete all cache entries you can do so with the deleteAll() method.

$cacheDriver = new \Doctrine\Common\Cache\ArrayCache();
$deleted = $cacheDriver->deleteAll();
Martijn
  • 15,791
  • 4
  • 36
  • 68
Antho
  • 323
  • 3
  • 8
  • 2
    What's the difference to cache flushing? – Czechnology Jul 30 '16 at 19:30
  • 1
    This code creates a new cache driver. It should utilize the current QueryCacheProfile or result cache implementation from the configuration. It will not magically clear cache in your application if use use e.g. Redis or Memcached. – Kafoso Aug 13 '18 at 14:06
2

In case you use APC, you could also just call the code

<?php
$deleted = apc_clear_cache() && apc_clear_cache('user');

in a php page on the same server. This is what deleteAll() method in Antho's answer does, but you do not depend on the Doctrine Classes. Btw: the complete cache will be flushed - just in case you use it for non-Doctrine stuff.

Oli
  • 103
  • 8
2

I thought I was going crazy with doctrine results caching - in the end I had to restart memcached.

beterthanlife
  • 1,668
  • 2
  • 18
  • 30
1

I know the title of this post says Symfony 2, but for those of you coming from google, if you have Symfony 3+ its gonna be:

bin/console

As opposed to:

app/console
lsimonetti
  • 1,422
  • 3
  • 16
  • 26
0

Maybe is a little late for this, but in my case, doctrine didn't generate the proxy classes in production, for that I change the auto_generate_proxy_classes to true:

#symfony2&3 app/config/config.yml
#symfony4 config/packages/doctrine.yaml (by default true since 4.2)

doctrine:
    orm:
        auto_generate_proxy_classes: true #"%kernel.debug%"
Koronos
  • 547
  • 4
  • 16
0

Maybe someone searching
Symfony 6.2+

public function __construct(..., private KernelInterface $kernel

And

$this->kernel->shutdown(); //RESET ALL

You running Multiple entities and You managed connection with Sessions

/** @var SiteService $siteService */
$siteService = $this->kernel->getContainer()->get(SiteService::class); //Important kernel->getContainer()
/** @var Site[] $sites */
$sites = $siteService->repository->getByInstalledSites();

foreach ($sites as $site) {
    dump('Domain:'. $site->getDomain());
    $session = new Session();
    $session->set('db_user', $site->getUser());
    $session->set('db_password', $this->getDecryptPassword($site->getPassword()));
    $session->set('db_name', $site->getDatabaseName())
    
    $user = $this->userService->getById(1);

    dump($user);
    //what you want to do ...

    $this->kernel->shutdown(); //Running All bundles shutdown and container set null        
    $this->kernel->boot(); // services_resetter->reset and preboot -> loading bundles&Containers and all bundles set container & run boot
}
Murat Çakmak
  • 151
  • 2
  • 7