Symfony 我如何通过一对多双向方式获取第二个实体的数据
我现在很困惑,我知道,希望我能在这里得到帮助。 我在symfony 3中使用了两个实体,它们具有一对多的双向映射 一个用户可以有多个地址。 用户实体: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
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中的集合数。。。如果计数是预期的计数,您可能很好。。。或者,您可以循环收集并转储每个项目的值。因此,现在我将取消它。我在寻找一个没有问题的问题。谢谢注意:用户实体中的“地址”将返回一个集合,因此将标识符名称复数化以适应更好的代码可读性注意:用户实体中的“地址”将返回一个集合,因此将标识符名称复数化以适应更好的代码可读性