Symfony2条令关联结果

Symfony2条令关联结果,symfony,doctrine-orm,associations,entity,Symfony,Doctrine Orm,Associations,Entity,我不熟悉Symfony/学说。 我创建了两个实体,用于管理附加到它们的一些评论和文档: 这里是,这里是。 现在的问题是什么时候从数据库中获取数据,如下所示: $comment = $em->getRepository('PathToBundle:Comment')->findOneBy( array('ordernumber' => '123456') ); Path\ToBundle\Entity\Comment Object

我不熟悉Symfony/学说。 我创建了两个实体,用于管理附加到它们的一些评论和文档: 这里是,这里是。 现在的问题是什么时候从数据库中获取数据,如下所示:

    $comment = $em->getRepository('PathToBundle:Comment')->findOneBy(
        array('ordernumber' => '123456')
    );
    Path\ToBundle\Entity\Comment Object
    (
        [id:Path\ToBundle\Entity\Comment:private] => 1
        [ordernumber:Path\ToBundle\Entity\Comment:private] => 123456
        [category:Path\ToBundle\Entity\Comment:private] => cat1
        [comment:Path\ToBundle\Entity\Comment:private] => com1
        [user:Path\ToBundle\Entity\Comment:private] => usr1
        [version:Path\ToBundle\Entity\Comment:private] => 0
        [documents:Path\ToBundle\Entity\Comment:private] => Doctrine\ORM\PersistentCollection Object
            (
                [snapshot:Doctrine\ORM\PersistentCollection:private] => Array
                    (
                    )

                [owner:Doctrine\ORM\PersistentCollection:private] => Path\ToBundle\Entity\Comment Object
     *RECURSION*
                [association:Doctrine\ORM\PersistentCollection:private] => Array
                    (
                        [fieldName] => documents
                        [mappedBy] => comment
                        [targetEntity] => Path\ToBundle\Entity\CommentDocument
                        [cascade] => Array
                            (
                            )

                        [orphanRemoval] => 
                        [fetch] => 2
                        [type] => 4
                        [inversedBy] => 
                        [isOwningSide] => 
                        [sourceEntity] => Path\ToBundle\Entity\Comment
                        [isCascadeRemove] => 
                        [isCascadePersist] => 
                        [isCascadeRefresh] => 
                        [isCascadeMerge] => 
                        [isCascadeDetach] => 
                    )
假设我不想调试它,所以我

    print_r($comment);
打印出来的是这样的:

    $comment = $em->getRepository('PathToBundle:Comment')->findOneBy(
        array('ordernumber' => '123456')
    );
    Path\ToBundle\Entity\Comment Object
    (
        [id:Path\ToBundle\Entity\Comment:private] => 1
        [ordernumber:Path\ToBundle\Entity\Comment:private] => 123456
        [category:Path\ToBundle\Entity\Comment:private] => cat1
        [comment:Path\ToBundle\Entity\Comment:private] => com1
        [user:Path\ToBundle\Entity\Comment:private] => usr1
        [version:Path\ToBundle\Entity\Comment:private] => 0
        [documents:Path\ToBundle\Entity\Comment:private] => Doctrine\ORM\PersistentCollection Object
            (
                [snapshot:Doctrine\ORM\PersistentCollection:private] => Array
                    (
                    )

                [owner:Doctrine\ORM\PersistentCollection:private] => Path\ToBundle\Entity\Comment Object
     *RECURSION*
                [association:Doctrine\ORM\PersistentCollection:private] => Array
                    (
                        [fieldName] => documents
                        [mappedBy] => comment
                        [targetEntity] => Path\ToBundle\Entity\CommentDocument
                        [cascade] => Array
                            (
                            )

                        [orphanRemoval] => 
                        [fetch] => 2
                        [type] => 4
                        [inversedBy] => 
                        [isOwningSide] => 
                        [sourceEntity] => Path\ToBundle\Entity\Comment
                        [isCascadeRemove] => 
                        [isCascadePersist] => 
                        [isCascadeRefresh] => 
                        [isCascadeMerge] => 
                        [isCascadeDetach] => 
                    )
它才刚刚开始,一直持续到浏览器崩溃。但如果尝试访问单个属性,如

    print_r($input->getComment());
它工作正常


那么这种行为是正常的,还是我做错了什么?如何访问相关文档表值?

这种行为几乎是意料之中的。条令提供的实体对象有很多功能。转储原始对象将输出大量数据

也就是说,您不应该转储实体(或任何大型类)对象。如果需要调试信息,请将输出限制为仅与之相关的内容

我还认为你误解了ORM类学说的目的

以及如何访问相关文档表值

虽然通过Doctrine的类元数据工厂访问原始数据库特性(如表信息)在技术上是可行的,但简单的回答是您不想这样做。条令抽象了底层的数据库结构,试图剥离这种抽象否定了最初使用ORM的全部理由

专注于利用条令为你提供的工具;引擎盖下发生的事情不那么重要,尤其是对于初学者


(当然,这一论点的另一面是,了解平台的内部工作对于高级技术至关重要,例如使用自定义代码扩展基本原则功能。不过,初学者不应该尝试这样做。有可能你可以使用现有工具做你需要做的事情。)

这是正常的。请注意,您的第一次打印尝试是在一个条令对象上,第二次是在一个字符串上。条令的对象是多层次的,包含了大量的信息。不要使用
print\r
尝试使用Doctrine的
Debug
类,该类允许您指定最大深度

如果实体设置正确,您应该能够通过

$comments->getDocuments();