Symfony2条令关联结果
我不熟悉Symfony/学说。 我创建了两个实体,用于管理附加到它们的一些评论和文档: 这里是,这里是。 现在的问题是什么时候从数据库中获取数据,如下所示: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
$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();