首先,请原谅我糟糕的英语。
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/