首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在symfony 3.3中添加外部约束后获得奇怪的数据

在symfony 3.3中添加外部约束后获得奇怪的数据
EN

Stack Overflow用户
提问于 2017-07-28 08:42:06
回答 4查看 139关注 0票数 1

我的应用程序中有两个简单的实体:产品分类,它们与ManyToOne关系相关:

代码语言:javascript
运行
复制
    <?php

    namespace AppBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;

    /**
     * Product
     *
     * @ORM\Table(name="product")
     * @ORM\Entity
     */
    class Product
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;

        /**
         * @var string
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        private $name;

        /**
         * @var string
         *
         * @ORM\Column(name="description", type="text")
         */
        private $description;

        /**
         * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
         * @ORM\KoinColumn(onDelete="CASCADE")
         */
        private $category;

        /**
         * Get id
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }

        /**
         * Set name
         *
         * @param string $name
         *
         * @return Product
         */
        public function setName($name)
        {
            $this->name = $name;

            return $this;
        }

        /**
         * Get name
         *
         * @return string
         */
        public function getName()
        {
            return $this->name;
        }

        /**
         * Set description
         *
         * @param string $description
         *
         * @return Product
         */
        public function setDescription($description)
        {
            $this->description = $description;

            return $this;
        }

        /**
         * Get description
         *
         * @return string
         */
        public function getDescription()
        {
            return $this->description;
        }

        /**
         * @return int
         */
        public function getCategory()
        {
            return $this->category;
        }

        /**
         * @param int $category
         */
        public function setCategory($category)
        {
            $this->category = $category;
        }
    }

/**
 * Category
 *
 * @ORM\Table(name="category")
 * @ORM\Entity
 */
class Category
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Category
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
}

该关系正在工作,fine.But --有一个problem.When,我试图通过以下方法从DB获取对象

代码语言:javascript
运行
复制
public function indexAction(){
        $products = $this->getDoctrine()
            ->getRepository('AppBundle:Product')
            ->findAll();

        echo "<pre>";
        print_r($products);die;
    }

它返回代码的语气,比如:

代码语言:javascript
运行
复制
Array
(
    [0] => AppBundle\Entity\Product Object
        (
            [id:AppBundle\Entity\Product:private] => 1
            [name:AppBundle\Entity\Product:private] => Samsung Galaxy S5
            [description:AppBundle\Entity\Product:private] => Stylish and elegant!
            [category:AppBundle\Entity\Product:private] => Proxies\__CG__\AppBundle\Entity\Category Object
                (
                    [__initializer__] => Closure Object
                        (
                            [static] => Array
                                (
                                    [entityPersister] => Doctrine\ORM\Persisters\Entity\BasicEntityPersister Object
                                        (
                                            [class:protected] => Doctrine\ORM\Mapping\ClassMetadata Object
                                                (
                                                    [name] => AppBundle\Entity\Category
                                                    [namespace] => AppBundle\Entity
                                                    [rootEntityName] => AppBundle\Entity\Category
                                                    [customGeneratorDefinition] => 
                                                    [customRepositoryClassName] => 
                                                    [isMappedSuperclass] => 
                                                    [isEmbeddedClass] => 
                                                    [parentClasses] => Array
                                                        (
                                                        )

                                                    [subClasses] => Array
                                                        (
                                                        )

                                                    [embeddedClasses] => Array
                                                        (
                                                        )

                                                    [namedQueries] => Array
                                                        (
                                                        )

                                                    [namedNativeQueries] => Array
                                                        (
                                                        )

                                                    [sqlResultSetMappings] => Array
                                                        (
                                                        )

还有更多,这是不可能在这里完全呈现的。如果有人建议我如何摆脱所有这些不必要的数据,只接收我对象的属性,我将非常感激。提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2017-07-28 08:52:57

这是因为Doctrine在默认情况下将关联作为代理加载,而代理是对实际实体的引用。然后,当您尝试从该关联中获取某些信息时,Doctrine实际上会从数据库中获取数据并将其注入水。这通常被称为“延迟加载”,对于提高性能非常有用。

要解决这个问题,必须在关联中设置急切的获取模式:

代码语言:javascript
运行
复制
/**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="products", fetch="EAGER")
 */
private $category;
票数 1
EN

Stack Overflow用户

发布于 2017-07-28 08:55:19

您可以使用查询生成器。

代码语言:javascript
运行
复制
$qb = $repository->createQueryBuilder('p')->getQuery()->getArrayResult();

作为数组获得结果

票数 0
EN

Stack Overflow用户

发布于 2017-07-28 11:40:15

为此使用Symfony序列化程序(或JMS序列化程序)。

例如,您可以简单地将输出配置为实体的各种字段集(使用序列化组),隐藏某些字段并仅显示相关实体的ID。

基本文件如下:

https://symfony.com/doc/current/components/serializer.html

https://symfony.com/doc/current/serializer.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45368802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档