對於翻譯我的實體產品的使用下面的代碼序列化translateble實體
use Knp\DoctrineBehaviors\Model as ORMBehaviors;
class Product
{
/**
* @Groups({"prod_translate"})
*/
use ORMBehaviors\Translatable\Translatable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Groups({"prod"})
*/
private $id;
...
可翻譯與DB product_translation與ID,translatable_id,語言環境和translatble性能表中創建新的實體ProductTranslation。 翻譯完美。在頁面中只需編寫{{product.translation.en/sp.name}} 使用ajax pagenation時,使用序列化程序返回數據。 嘗試JMS \串行\ SerializerBuilder和Symfony的\分量\串行器\串行
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Doctrine\Common\Annotations\AnnotationReader;
$products = $em->getRepository('AppBundle:Product')->findNextPageByBrandCategoryIds(array($cat), $brand, $offset, $limit);
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$normalizer = new ObjectNormalizer($classMetadataFactory);
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getID();
});
$serializer = new Serializer(array($normalizer));
$jsonObject = $serializer->normalize($products, 'json', array('groups' => array('prod', 'prod_translate')));
沒有組serializet返回 「最長執行時間180秒」。 使用羣組僅返回沒有翻譯的產品數據。
解決此問題需要做什麼註釋或操作?請幫忙!
編輯: 嘗試使用下一個疑問:
public function findNextPageByBrandCategoryIds(array $cat_ids, $brand_id, $offset=0, $limit=8)
{
$qb = $this->createQueryBuilder('p');
if(!empty($cat_ids)){
$cat_ids = implode(',', $cat_ids);
$qb->join('p.categories', 'c')
->where($qb->expr()->in('c.id', $cat_ids));
}
if(!empty($brand_id)){
$qb->andWhere('p.brand = :brand')
->setParameter('brand', $brand_id);
}
if($offset>0){
$qb->setFirstResult($offset);
}
$qb->setMaxResults($limit);
return $qb->getQuery()->getResult();
}
private function findNextPageByBrandCategoryIds($cat_id, $brand_id, $offset=0, $limit=8)
{
$em = $this->getDoctrine()->getManager();
$sql = "SELECT p.id, t.id AS translate_id " .
"FROM product p INNER JOIN product_translation t ON t.translatable_id = p.id";
$where .= ' WHERE 1=1 ' ;
$rsm = new ResultSetMappingBuilder($em);
if(!empty($cat_id)){
$sql .= " LEFT JOIN products_categories c ON c.product_id = p.id ";
$where .= " AND c.category_id = ".$cat_id;
}
if(!empty($brand_id)){
$where .= " AND p.brand = ".$brand_id;
}
$limit = ' LIMIT '.$limit;
if($offset>0){
$limit .= ' OFFSET '.$offset;
}
$sql = $sql.$where.$limit;
$rsm->addRootEntityFromClassMetadata('AppBundle\Entity\Product', 'p');
$rsm->addJoinedEntityFromClassMetadata('AppBundle\Entity\ProductTranslation', 't', 'p', 'product', array('id' => 'translatable_id'));
$query = $em->createNativeQuery($sql, $rsm);
return $query->getResult();
}
調試幾乎每一行 - 他們是對的。
如果使用setHint(\ Doctrine \ ORM \ Query :: HINT_FORCE_PARTIAL_LOAD,true) - 工作但僅返回產品,不帶翻譯。
謝謝回答。 (( –
)如果答案解決了你的問題,你可以在綠色檢查中標記爲正確的單擊,如果在我的開發環境中將限制設置爲'0' –
這是沒有解決的問題 –