0

我的实体是这样的:

<?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

现在,当我找到一个特定的单词时,我必须遍历定义才能访问所有Definitions (我认为是因为延迟加载)。像这样

  foreach ($word->getDefinitions()  as $definition) {
      dump($definition->getDefinition());
  }

但我不想迭代定义。我想访问所有定义,当json_encode$word

现在我的问题是:当实体实现时如何禁用延迟加载JsonSerializabelInterface

4

1 回答 1

1

你为什么要将与基础设施相关的代码与域混合,并试图破解 Doctrine 本身?从实体中删除接口并使用序列化程序为您完成艰巨的工作。

您的域将摆脱诸如序列化之类的低级问题,并且您将变得更加灵活,因为实体可以以多种方式/格式进行序列化,具体取决于用例。

于 2018-01-04T13:08:12.030 回答