1-й параметр executeCacheQuery хочет получить оператор и строку? - PullRequest
0 голосов
/ 10 октября 2018

Использование

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);

Я не уверен, что именно передать в качестве 1-го параметра для $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 класса:

enter image description here

Когда я использую вместо этого $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 / ru / 2.8 / reference / caching.html # caching

Как мне удается кэшировать этот запрос?

...