С помощью
doctrine/common v2.9.0
doctrine/dbal v2.8.0
Это оскорбительная часть кода:
$qb = $db->createQueryBuilder()
->select(...)
->from(...)
->leftJoin(...)
->where(...)
->orderBy(...)
->setMaxResults(1)
->setParameter('forum_id', ANNOUNCEMENT_FORUM_ID ?? 3);
$query = $db->executeCacheQuery($qb->execute(), $qb->getParameters(), $qb->getParameterTypes(), new \Doctrine\DBAL\Cache\QueryCacheProfile(60, 'announcement', null));
$announcement = $query->fetch();
dump($announcement);
Я не уверен, что именно передать в качестве первого параметра для $db->executeCacheQuery()
потому что если я положу $qb->execute()
там, как он хочет, чтобы я передал заявление, я получаю эту ошибку:
Recoverable fatal error: Object of class PDOStatement could not be converted to string in ...../vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php on line 102
Что это за часть внутри QueryCacheProfile
учебный класс:
Когда я использую $qb->getSQL()
вместо этого, который является строкой, я получаю эту ошибку:
Fatal error: Uncaught TypeError: Argument 1 passed to Doctrine\DBAL\Cache\ResultCacheStatement::__construct() must be an instance of Doctrine\DBAL\Driver\Statement, instance of PDOStatement given, called in ....
Вот пример документа, которому я следовал: https://www.doctrine-project.org/projects/doctrine-dbal/en/2.8/reference/caching.html#caching
Как мне удается кэшировать этот запрос?
Задача ещё не решена.
Других решений пока нет …