Troubleshooting
Common issues that you may run into when configuring or running Laravel Doctrine.
The DatabaseTransactions trait is not working for tests
You will need to use a new trait instead of the default Laravel trait. Here is an example of an implementation:
<?php
namespace Tests;
use LaravelDoctrine\ORM\Facades\EntityManager;
trait DoctrineDatabaseTransactions
{
public function setUpDoctrineDatabaseTransactions(): void
{
EntityManager::getConnection()->beginTransaction();
}
public function tearDownDoctrineDatabaseTransactions(): void
{
EntityManager::getConnection()->rollBack();
}
}
If you would like to also use assertDatabaseHas
in your tests, you need to tell Laravel to use the same connection as Doctrine is using so that it can find rows that have not been committed in a transaction:
$pdo = app()->make(\Doctrine\ORM\EntityManagerInterface::class)->getConnection()
->getWrappedConnection();
app()->make(\Illuminate\Database\ConnectionInterface::class)->setPdo($pdo);
ErrorException: require(.../storage/proxies/CGEntity.php): Failed to open stream: No such file or directory
Proxies need to be generated before they can be used. You can generate the proxies manually using the php artisan doctrine:generate:proxies
command, or you can enable proxy auto generation in your doctrine.php
config file. By default, you can set the DOCTRINE_PROXY_AUTOGENERATE
environment value to true to enable auto generation.
Note: Proxy auto generation should always be disabled in production for performance reasons.