Symfony 我如何通过一对多双向方式获取第二个实体的数据

Symfony 我如何通过一对多双向方式获取第二个实体的数据,symfony,doctrine-orm,one-to-many,Symfony,Doctrine Orm,One To Many,我现在很困惑,我知道,希望我能在这里得到帮助。 我在symfony 3中使用了两个实体,它们具有一对多的双向映射 一个用户可以有多个地址。 用户实体: class User extends BaseUser { public function __construct() { parent::__construct(); $this->address = new \Doctrine\Common\Co

我现在很困惑,我知道,希望我能在这里得到帮助。 我在symfony 3中使用了两个实体,它们具有一对多的双向映射

一个用户可以有多个地址。

用户实体:

class User extends BaseUser
    {


        public function __construct()
        {
            parent::__construct();
            $this->address = new \Doctrine\Common\Collections\ArrayCollection();
            $this->created         = new \DateTime();
            $this->roles = array('ROLE_USER');

        }


        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;

        /**
         * One Customers has many adresses
         * @ORM\OneToMany(targetEntity="AppBundle\Entity\Address",mappedBy="user")

         */
        private  $address;

     /**
         * @return \Doctrine\Common\Collections\ArrayCollection
         */
        public function getAddress()
        {
            return $this->address;
        }

        /**
         * @param Address $address
         * @return $this
         */
        public function setAddress(Address $address)
        {
            $this->address[] = $address;
            return $this;
        }
地址实体:

 * @ORM\Table(name="md_address")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\AddressRepository")
 */
 class Address
{

     public function __construct()
     {
         $this->created         = new \DateTime();
     }

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

     /**
      * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="address")
      * @ORM\JoinColumn(name="user_id",referencedColumnName="id")
      */
     protected  $user;
     /**
      * @var \DateTime
      * @ORM\Column(name="created", type="datetime")
      */

public function getUser()
 {
     return $this->user;
 }


 public function setUser(User $user)
 {
     $this->user = $user;
     return $this;
 }
在控制器中,我称之为:

$customer = $this->getDoctrine()->getRepository('AppBundle:User')
        ->find($this->id);
倾泻

$customer ->getAddress()
显示

亚马尔先生

orm:
        default_entity_manager: default
        auto_generate_proxy_classes:  true
        proxy_dir:            '%kernel.cache_dir%/doctrine/orm/Proxies'
        proxy_namespace:      Proxies
        entity_managers:
              default:

                    naming_strategy: doctrine.orm.naming_strategy.underscore
                    auto_mapping: true
                    metadata_cache_driver:
                               type: service
                               id: app.doctrine_orm.cache
                    result_cache_driver:
                               type: service
                               id: app.doctrine_orm.cache
                    query_cache_driver:
                               type: service
                               id: app.doctrine_orm.cache
                    second_level_cache:
                                enabled: true
#                    mappings:
#                        AppBundle:  ~
#                        FOSUserBundle: ~
#              mdtrack:
#                    connection: mdtrack
#                    mappings:
#                        AppBundle:  ~
我该怎么办,$customer-getAddress()显示了映射到他的所有地址。我刚从转储中获取数据?

地址中的用户字段映射到用户。这两个实体在注册并添加新地址后合并在一起


我认为表单类型对于这里的问题并不重要。我不知道我是否正确理解您的问题,但我认为您只是感到困惑,因为加载用户实体后,地址数据没有显示在对象转储中

您是否尝试过调用
$customer->getAddress()

这可能只是一个延迟加载问题,关系数据只有在实际访问时才会加载。在此之前,客户实体将只持有一个空代理对象

$adresses = $customer->getAdress()

编辑:要获得更详细的答案,我不知道我是否正确理解您的问题,但我想您只是感到困惑,因为加载用户实体后,地址数据没有立即显示在对象转储中

您是否尝试过调用
$customer->getAddress()

这可能只是一个延迟加载问题,关系数据只有在实际访问时才会加载。在此之前,客户实体将只持有一个空代理对象

$adresses = $customer->getAdress()

编辑:要获得更详细的答案

是的,没错,这就是我想要的$customer->GetAddress()显示了上述转储,我想您误解了。。。您在上面的“dump”中看到的是由twig中的dump()函数生成的转储。这就是隐藏数据以防怀疑,特别是当数据被延迟加载时。。。尝试使用php中的count($customer->getAddress())或twig中的| length来计算php或twig中的集合数。。。如果计数是预期的计数,您可能很好。。。或者,您可以循环收集并转储每个项目的值。因此,现在我将取消它。我在寻找一个没有问题的问题。谢谢是的,没错,这就是我想要的$customer->GetAddress()显示了上述转储,我想您误解了。。。您在上面的“dump”中看到的是由twig中的dump()函数生成的转储。这就是隐藏数据以防怀疑,特别是当数据被延迟加载时。。。尝试使用php中的count($customer->getAddress())或twig中的| length来计算php或twig中的集合数。。。如果计数是预期的计数,您可能很好。。。或者,您可以循环收集并转储每个项目的值。因此,现在我将取消它。我在寻找一个没有问题的问题。谢谢注意:用户实体中的“地址”将返回一个集合,因此将标识符名称复数化以适应更好的代码可读性注意:用户实体中的“地址”将返回一个集合,因此将标识符名称复数化以适应更好的代码可读性