我的实体是这样的:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\WordRepository")
*/
class Word implements \JsonSerializable
{
const SOURCE_OXFORD = 'oxford';
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $word;
/**
* @ORM\OneToMany(targetEntity="Definition", mappedBy="word")
*/
private $definitions;
/// other prorperties and setter/getters
public function jsonSerialize()
{
return [
'word' => $this->word,
'definitions' => $this->definitions,
];
}
}
Definition
实体与reversedBy
的关系也Word
,并且也是JsonSerializable
实施的。
现在,当我找到一个特定的单词时,我必须迭代定义以访问所有Definition
(因为我认为是延迟加载)。像这样
foreach ($word->getDefinitions() as $definition) {
dump($definition->getDefinition());
}
但我不想迭代定义。我希望在json_encode
$word
现在我的问题是:当从JsonSerializabelInterface
实现实体时,如何禁用延迟加载?
答案 0 :(得分:1)
为什么要将与基础架构相关的代码与域混合并尝试破解Doctrine本身?从实体中删除界面并使用serializer为您完成艰苦的工作。
您的域名将免于序列化等低级别问题,您将变得更加灵活,因为实体可以通过多种方式/格式进行序列化,具体取决于用例。