【发布时间】:2020-12-04 17:24:35
【问题描述】:
我有一个实体 Photo 和另一个 PhotoNote ( 0 到 10 ) 照片可以有注释,但不能太多
当我请求照片实体时,我收到以下错误
未找到 ID idPhoto(1737) 的“App\Entity\PhotoNote”类型实体
在我的控制器中使用它
$photo = $photoRepository->findOneBy(['idPhoto' => $idPhoto]);
// check if there is a note
$note = (null !== $photo->getPhotoNote() ? $photo->getPhotoNote()->getNotePhoto() : 0);
// Also tried following
//$note = (null !== $photo->getPhotoNote()->getNotePhoto() ? $photo->getPhotoNote()->getNotePhoto() : null);
/**
* --> this throws the error : $photo->getPhotoNote()->getNotePhoto()
*/
这里是$photo->getPhotoNote() 在 App\Entity\Photo 中的转储:
Photo.php on line 443:
Proxies\__CG__\App\Entity\PhotoNote {#5710 ▼
+__isInitialized__: false
-idPhoto: 1737
-notePhoto: null
…2
}
其实$photo->getPhotoNote() 不为空,photoNote 填充了 photoId。使用$photo->getPhotoNote()->getNotePhoto() 学说时会生成查询以获取关联的注释,但该照片没有注释。注意不是强制性的。
我想要的是“getPhotoNote”返回null 甚至0,但似乎一对一的关系需要一个现有的ID。
如何说教义返回null?
Class Photo {
/**
* @var int
*
* @ORM\Column(name="id_photo", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $idPhoto.
// some fields
/**
* @ORM\OneToOne(targetEntity=“App\Entity\PhotoNote”)
* @ORM\JoinColumn(name="id_photo", referencedColumnName="id_photo", nullable=true)
*/
private $photoNote;
public function setPhotoNote(PhotoNote $photoNote = null)
{
$this->photoNote = $photoNote;
return $this;
}
public function getPhotoNote()
{
return $this->photoNote;
}
}
Class PhotoNote {
/**
* @ORM\Id()
* @ORM\Column(name="id_photo", type="integer")
*/
private $idPhoto;
/**
* @ORM\Column(name="note_photo", type="smallint")
*/
private $notePhoto;
public function getNotePhoto(): ?int
{
return $this->notePhoto;
}
public function setNotePhoto(int $notePhoto): self
{
$this->notePhoto = $notePhoto;
return $this;
}
}
生成的查询:
SELECT
t0.id_photo AS id_photo_1,
t0.note_photo AS note_photo_2
FROM
photo_note t0
WHERE
t0.id_photo = 1737;
【问题讨论】:
-
你的
PhotoNote类真的只有这些属性还是这是一个简化的例子? -
@El_Vanja 表中只有两个字段,因此有两个属性。由于遗留原因,我无法更改 MySQL 结构上的任何内容
-
我明白了。真的很不幸,因为没有理由让它成为一个单独的表。您是否尝试过显式添加
referencedColumnName(在JoinColumn注释中)? -
是的,但我在手机上写了这个问题,这就是为什么 sn-p 尽可能简单
-
我同意没有理由将其作为单独的表。遗留项目真的是噩梦
标签: php doctrine-orm symfony5