我有一个User
具有一对多关系的实体,例如:
/**
* @ORM\OneToMany(targetEntity="UserMarket", mappedBy="user")
* @var Collection|UserMarket[]
*/
private Collection $userMarkets;
这个User
对象由简单的 UserProvider 类返回,它确保User
确实是我想要的类:
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
class UserProvider
{
/**
* @var Security
*/
private Security $security;
/**
* @var EntityManagerInterface
*/
private EntityManagerInterface $entityManager;
public function __construct(Security $security, EntityManagerInterface $entityManager)
{
$this->security = $security;
$this->entityManager = $entityManager;
}
public function getUser(): User
{
$repository = $this->entityManager->getRepository(User::class);
$user = $this->security->getUser();
if ($user instanceof User) {
return $user;
}
/** @var User $dbUser */
$dbUser = $repository->findOneBy(['username' => $user->getUsername()]);
return $dbUser;
}
}
当我在 Type 类中获取 User 时(需要将结果收紧到仅与用户相关的数据),尽管数据库中有与之相关的对象userMarkets
,但集合始终为空。
对此感到好奇的是,在探查器的数据库选项卡中,我可以看到所有数据都已正确查询(不存在的 userMarket 的 id 用于获取更多相关对象)。
更奇怪的是,当我添加到注释时,集合被正确填充。我不明白为什么当 fetch 是懒惰的时候它不是,所以我猜想会有一些无法预料的后果。还有..我在尝试授权时遇到错误:UserMarket
fetch="EAGER"
fetch="EAGER"
注意:serialize(): "" 作为成员变量从 __sleep() 返回但不存在
我不太清楚,代码的哪一部分在这里可能很重要。请指教,我做错了什么?