php – 阻止实体连接的dql

我想写一个DQL查询,选择发布并加入另一个实体

这是我的代码

 $dql = '
                        SELECT p , h ,t ,m 
                        FROM App:Post p 
                        LEFT JOIN p.mentions m
                        LEFT JOIN p.tags t 
                        LEFT JOIN p.file h 
                        WHERE p.user
                        IN (
                            SELECT f FROM App:User u
                            JOIN u.followers f
                            WHERE u.id = :uid
                           )
                        OR p.user = :uid ';

        $query     = $this->getEntityManager()
            ->createquery($dql)
            ->setMaxResults(1)
            ->setParameters(['uid' => $user->getId()]);
        $paginator = new Paginator($query, $fetchJoinCollection = true);

但问题是循环引用,例如,Post – >标签 – >用于序列化并使项目冻结并显示空白页面的帖子.

here is dump export

我如何处理除了使用循环外观PersistentCollection

更新::

这是我的seriallizer代码

  $posts= [];
        foreach ($paginator as $post) {

            $posts[] = $post;

        }

        $serializer = SerializerBuilder::create()->build();
        $gifts      = $serializer->toArray($posts);

解决方法:

您可以使用序列化组来避免循环引用问题.基本上,这允许您为每个属性定义一个组(或多个组),然后您只能要求特定的(s)组被序列化.

对于symfony本机序列化程序:

> http://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations
> https://symfony.com/blog/new-in-symfony-2-7-serialization-groups

对于JMS:https://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...