如何使用 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
实际上会加载关系,如果您之后转储它,字段将不会为空
这是延迟加载原则造成的,以避免内存过载。
正如@AythaNzt 所说,如果您循环遍历实体,您将能够访问它们的属性(当您按照 getField() 原则触发查询以获取其数据时)
选中此项以显示所有子字段:
这是我的实体"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
实际上会加载关系,如果您之后转储它,字段将不会为空
这是延迟加载原则造成的,以避免内存过载。 正如@AythaNzt 所说,如果您循环遍历实体,您将能够访问它们的属性(当您按照 getField() 原则触发查询以获取其数据时)
选中此项以显示所有子字段: