我的问题很简单,但我在网上搜索了一个小时后没有找到任何线索。
我正在尝试构建一个 Symfony API,但是当返回 json 输出时,它会延迟加载输出中的每个关系。虽然这不是什么大问题(在大多数情况下),但当它对用户信息执行此操作时,情况确实很糟糕。因此,所有内容(密码、电子邮件等)都会显示出来。
我的问题是:是否可以在学说中将一个实体标记为受保护,这样就不会使用该实体进行自动加载?在某些情况下它非常方便,但这是一个很大的缺陷。如果无法标记实体,是否可以完全停用它或在集合元素上停用它?
提前致谢
编辑:
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $email;
/**
* @var string The hashed password
* @ORM\Column(type="string")
*/
private $password;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Profile", mappedBy="user", cascade={"persist", "remove"})
*/
private $profile;
getter 和 setter 都在那里。
还有一个 Profile 类,即所有关系的接口。它具有 1to1 的关系。
class Profile
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="App\Entity\User", inversedBy="profile", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $user;
getter 和 setter 就在那里。
class Event
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="datetime")
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Profile", inversedBy="ownedEvents")
* @ORM\JoinColumn(nullable=false)
*/
private $profile;
/**
* @ORM\OneToMany(targetEntity=Post::class, mappedBy="event", orphanRemoval=true)
*/
private $posts;
问题是,该配置文件已加载,用户也可以使用它......以下是控制器功能。但序列化是在额外的方法中进行的。
public function getUnreactedEvents(): JsonResponse{
$events = $this->getDoctrine()
->getManager()
->getRepository(Event::class)
->getUnreactedEvents($this->profileUtils->getLoggedInProfileFromDatabase()->getId());
return new JsonResponse($this->eventUtils->eventsToArray($events));
}
守着一只汪