Symfony 4 Doctrine关系,集合不获取数据

3
首先,请原谅我的这篇英文文章的语法错误。我正在使用Symfony 4.0和Doctrine-bridge 4.0。在使用OneToMany关系时,属性保持为空。
背景信息:我正在尝试创建一个用户实体和一个银行账户实体,以便只有当前与此用户相关的账户才能被用户实体加载。我已经创建了一个带有OneToMany关系到Account实体的User实体。Account实体具有(相反的)ManyToOne关系到User。当我调用$user时,在我的关系字段中得到一个空集合。
期望结果:当转储$user时,我希望获得在$user账户字段中存储并与我的user_id匹配的Accounts实体集合。
实际结果:返回一个空的集合。
   User {#399 ▼
  -uid: 1
  -name: "Elie"
  -lastname: "XXXXX"
  -birthdate: DateTime @821919600 {#410 ▶}
  -email: "xxxxxxxxx@xxxxxx.xx"
  -password: "$2y$13$QAdyMal7VZmXzR3IwCFHYeDKokW0bRqko5rZHPtnhrbncdVVAr7E."
  -salt: null
  -roles: "ROLE_ADMIN"
  -username: "Elie"
  -accounts: PersistentCollection {#256 ▼
    -snapshot: []
    -owner: User {#399}
    -association: array:16 [ …16]
    -em: EntityManager {#213 …11}
    -backRefFieldName: "user"
    -typeClass: ClassMetadata {#401 …}
    -isDirty: false
    #collection: ArrayCollection {#419 ▼
      -elements: []
    }
    #initialized: false
  }
}

其他信息

在搜索Doctrine @OneToMany时,我发现有些人忘记了一些参数、参数等,或者打错了字。但我在我的代码中找不到这样的问题。所以我有些困惑。请帮忙。

用户实体:

/**
 * @ORM\Table(name="APP_USERS")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
 class User implements UserInterface, \Serializable 
 {

    ...

    **
    * @ORM\OneToMany(targetEntity="Account", indexBy="user", mappedBy="user")
    * @ORM\JoinColumn(name="account", referencedColumnName="user")
    */
    private $accounts;

    public function __construct()
    {
        $this->accounts = new ArrayCollection();
    }

    /**
    * @return Collection|Account[]
    */
    public function getAccounts()
    {
        return $this->accounts;
    }

    /**
     * @param mixed $accounts
     */
    public function setAccounts($accounts): void
    {
        $this->accounts = $accounts;
    }

账户实体:

/**
 * @ORM\Table(name="APP_ACCOUNTS")
 * @ORM\Entity(repositoryClass="App\Repository\AccountRepository")
 */
 class Account
{

    ...

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="accounts")
     * @ORM\JoinColumn(nullable=true, unique=false, referencedColumnName="uid")
     */
     private $user;

    /**
     * @return mixed
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * @param mixed $user
     */
     public function setUser($user): void
    {
        $this->user = $user;
    }

最好分享两个实体的整个代码。 - Lapixel
2个回答

1
尝试指定“EAGER”获取以避免懒加载。
**
* @ORM\OneToMany(targetEntity="Account", indexBy="user", mappedBy="user", fetch="EAGER")
* @ORM\JoinColumn(name="account", referencedColumnName="user")
*/
private $accounts;

我认为如果没有指定,Doctrine 将不会从数据库加载帐户数据,直到使用 getAccounts 真正请求它们...


谢谢您的反应。您修复得真快 ;) - Elie Lam
你刚刚救了我的一命!谢谢。 - Valor_

0

如果你不需要它,那么我不会避免懒加载,因为它不会被加载。 如果你需要它,只需调用它...foreach、iterator_to_array()... 你甚至可以使用dump(iterator_to_array($yourVar));来转储它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接