微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐