如何使用 doctrine (Symfony 4) 输出 ManyToOne 数据?

How can I output ManyToOne data with doctrine (Symfony 4)?

这是我的实体"data":

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity(repositoryClass="App\Repository\DataRepository")
*/
class Data
{
  /**
  * @ORM\Id()
  * @ORM\GeneratedValue()
  * @ORM\Column(type="integer")
  */
  private $id;

  /**
  * @ORM\Column(type="string", length=10, unique=true)
  */
  private $uuid;



  /**
  * @ORM\Column(type="string", length=255)
  */
  private $content;



  /**
   * @ORM\ManyToOne(targetEntity="Fields")
   * @ORM\JoinColumn(name="field", referencedColumnName="id")
   */

  private $fields;



  public function getId(): ?int
  {
    return $this->id;
  }



  public function getContent()
  {
    return $this->content;
  }

  public function setContent($content)
  {
    $this->content = $content;
  }




  public function getUuid(): ?string
  {
    return $this->uuid;
  }

  public function setUuid(string $uuid): self
  {
    $this->uuid = $uuid;

    return $this;
  }


  public function getFields(): ?Fields
  {
    return $this->fields;
  }

  public function setFields(?Fields $fields): self
  {
    $this->fields = $fields;

    return $this;
  }


}

我正在通过学​​说获取数据:

$output = $this->em->getRepository(Data::class)->findAll();

输出:

array:2 [▼
  0 => Data {#7060 ▼
    -id: 1
    -uuid: "12345"
    -content: "blabla"
    -fields: Fields {#7164 ▼
      +__isInitialized__: false
      -id: 6
      -name: null
      -uuid: null
      -productgroup: null
      -type: null
       …2
    }
  }
  1 => Data {#7165 ▶}
]

问题是,ManyToOne "fields" 的数据只捕获了 id。但不是名称或产品组。都是"null"。但是在我的数据库中它不是空的。

这通常发生在您转储具有关系的对象时。用于检查字段关系是否没有空值。这样做:

dump($output[0]->getFields()->getName())

这是因为在这种情况下没有加载学说中的关系。

如果您之前访问过该关系,例如

$output->fields

实际上会加载关系,如果您之后转储它,字段将不会为空

Relationships and Proxy Classes

这是延迟加载原则造成的,以避免内存过载。 正如@AythaNzt 所说,如果您循环遍历实体,您将能够访问它们的属性(当您按照 getField() 原则触发查询以获取其数据时)

选中此项以显示所有子字段: