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

标签 symfony orm annotations doctrine foreign-keys

首先,请原谅我糟糕的英语。

I'm using Symfony 4.0 with Doctrine-bridge 4.0. When using a OneToMany relation, the property remains empty.

上下文

I'm trying to create a user entity and a bank account entity so that only account that are currently afillied to this user are able to be load by the user entity.

I've created an User entity with a OneToMany relation to an Account entity. The Account has a (inverse) ManyToOne relation to User. When I call $user I get an empty collection in my relation's field.

预期结果

When dump $user I expect to get a collection of the Accounts entities that are currently stored in $user accounts field and match the database with my user_id.

实际结果

返回一个空集合

   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;
    }

最佳答案

尝试指定“EAGER”抓取以避免延迟加载。

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

我认为,如果未指定 Doctrine ,则在真正请求之前不会使用 getAccounts 从数据库加载帐户数据...

关于Symfony 4 Doctrine 关系,集合不获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278842/

相关文章:

sql - Symfony2/Doctrine 查询生成器或 SQL - 使用 LIKE 语句时首选哪种方式?

symfony - 在没有 ES 服务器的情况下使用 FOSElasticaBundle 对 Symfony 应用程序进行单元测试?

python - 如何使用过滤器从列表中构建查询?

java - Hibernate 标准 - org.hibernate.TransientObjectException : object references an unsaved transient instance

service - 使用原型(prototype)作用域时出现 Symfony2 ScopeCrossingInjectionException

php - 尝试使用 Docker 启动已安装的 Symfony "Akeneo PIM"时,EACES 权限被拒绝

javascript - Sequelize : Check and add BelongsToMany (N to N) relation

Java:无法通过反射访问注释

python - 如何结合@singledispatch和@lru_cache?

java - Spring通过注解为当前用户传递参数值