当实体从JsonSerializabelInterface

时间:2018-01-04 13:04:55

标签: php doctrine symfony4

我的实体是这样的:

<?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实现实体时,如何禁用延迟加载?

1 个答案:

答案 0 :(得分:1)

为什么要将与基础架构相关的代码与域混合并尝试破解Doctrine本身?从实体中删除界面并使用serializer为您完成艰苦的工作。

您的域名将免于序列化等低级别问题,您将变得更加灵活,因为实体可以通过多种方式/格式进行序列化,具体取决于用例。