사용 중 Gedmo Doctrine extensions
번역 캐싱을 제외한 모든 기능이 잘 작동합니다.Symfony 2.3 Gedmo 교리 확장 캐싱 수행
$entity = $repository
->findByIdFullData($id)
->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')
->useResultCache(true, $cache_time, $cache_name)
->getOneOrNullResult();
findByIdFullData()
반환 \Doctrine\ORM\Query
그러나 번역은 캐시되지 않습니다. ext_translations
에서 결과를 얻을 수 있습니다
SELECT
e0_.content AS content0,
e0_.field AS field1
FROM
ext_translations e0_
WHERE
e0_.foreign_key = ?
AND e0_.locale = ?
AND e0_.object_class = ?
그리고 프로파일에서 모든 쿼리 : 프로파일 러에서 나는 같은 쿼리를 참조하십시오. 이미 변환 된 문자열로 결과를 캐시 할 수 있습니까?
Array Hydration과 memCache를 사용해 보았지만 결과 항목에 일련 번호가 부여되지 않은 미디어 파일이 업로드 되었기 때문에 더 이상 엉망이되었습니다. 어쨌든 대부분의 코드를 다시 작성하게 될 것입니다.
도움을 주시면 감사하겠습니다.
편집는 :
나는 카롤 Wojciechowski 씨의 답변을 시도하고 그것은 문제의 일부를 해결했다. getOneOrNullResult()
을 사용할 때 캐시하지만 getResult()
은 캐시하지 않습니다. 여기에 몇 가지 코드가 있습니다. 서비스에서
$query = $this->em
->getRepository('MainBundle:Channels')
->findActiveChannelsByGroupId($id);
$this->container->get('my.translations')->addTranslationWalkerToQuery($query, $this->request);
$channels = $query
->useResultCache(true, 900, '1__channels__active_by_group_1')
->getResult();
채널 저장소 :
public function findActiveChannelsByGroupId($group_id, $limit = null)
{
$rs = $this
->createQueryBuilder('c')
->select('c', 'm')
->leftJoin('c.media', 'm')
->leftJoin('c.group', 'g')
->where('c.active = 1')
->andWhere('g.id = :group_id')
->orderBy('c.sortOrder', 'asc')
->setParameter('group_id', $group_id)
->setMaxResults($limit);
return $rs->getQuery();
}
내가 findActiveChannelsByGroupId($id, 1)
(통지 제한 PARAM)로 변경하는 경우, 그것은 여전히 캐시하지 않습니다,하지만 나는 getOneOrNullResult()
로 변경하는 경우 , 쿼리가 캐시 됨
모든 컨트롤러에이 메소드를 추가해야하고 필요할 때마다 Query와 Request를 전달하여 호출해야하며'getResult()'만 호출하면됩니까? 죄송합니다. 어리 석습니다. Symfony에 대해별로 좋지 않습니다. – CRONUS
번역이 포함 된 엔티티를 가져 오는 데 사용되는 서비스가 있습니다 (이 방법 포함). 예, 앱의 여러 위치에서 사용합니다. –
그래서 일부 장소를 캐시에 넣으려고했는데 문제가 발생했습니다. getOneOrNullResult()를 사용하면 캐시 된 결과를 얻지 만,'getResult()'를 사용하면 질문에 설명 된 것과 같은 문제가 발생합니다. – CRONUS