Если это разовая операция, то лучше не использовать Doctrine, а сделать все прямым запросом в базу данных. В крайнем случае, можно воспользоваться DBAL, но опять же обычным SQL-запросом.
Если же необходимо все сделать именно средствами Doctrine, то:
- Оба репозитория записать в переменные и вынести их перед циклом
- Проверить отношения между сущностями, учавствующими в этой операции. Скорее всего, вы не помечаете коллекции как LAZY или EXTRA_LAZY и из-за этого Doctrine тащит кучу ненужных сущностей, забивая память
- Если п.2 не помог, то уменьшить кол-во итераций между очистками до 50 - 100
- Если п.3 не помог, то увеличить кол-во памяти через
ini_set('memory_limit', '512M');