我有兩個物體,PartenairePermission并且StructurePermission,我正在嘗試從One To Many關系中的另一個物體獲取屬性。
這對one to one關系很好,但我為One To Many關系修改了它,現在我不能再訪問屬性了
試圖呼叫類“Doctrine\ORM\PersistentCollection”的名為“setIsMembersRead”的未定義方法。
下面腳本的思想是當屬性被修改時PartenairePermission,它也修改了屬性StructurePermission。
關于如何解決這個問題的任何想法?
PartenaireController:[已編輯]
#[Route('/{id}/activate-permission', name: 'app_partenaire_activate-permission', methods: ['GET', 'POST'])]
public function activatePermission(EntityManagerInterface $entityManager, Request $request, PartenaireRepository $partenaireRepository, MailerInterface $mailer): Response
{
$partenairePermission = $entityManager->getRepository(PartenairePermission::class)->findOneBy([ // get the id of the partenaire
'id' => $request->get('id'),
]);
$partenairePermission->setIsMembersRead(!$partenairePermission->isIsMembersRead()); // set the value of the permission to the opposite of what it is ( for toggle switch )
$structurePermission = $partenairePermission->getPermissionStructure();
foreach ($structurePermission as $structurePermission) {
$structurePermission->setIsMembersRead($partenairePermission->isIsMembersRead());
}
$entityManager->persist($partenairePermission);
$entityManager->flush();
PartenairePermission.php :
#[ORM\OneToMany(mappedBy: 'permission_partenaire', targetEntity: StructurePermission::class, orphanRemoval: true)]
private Collection $permission_structure;
public function __construct()
{
$this->permission_structure = new ArrayCollection();
} /**
* @return Collection<int, StructurePermission>
*/
public function getPermissionStructure(): Collection
{
return $this->permission_structure;
}
public function addPermissionStructure(StructurePermission $permissionStructure): self
{
if (!$this->permission_structure->contains($permissionStructure)) {
$this->permission_structure->add($permissionStructure);
$permissionStructure->setPermissionPartenaire($this);
}
return $this;
}
public function removePermissionStructure(StructurePermission $permissionStructure): self
{
if ($this->permission_structure->removeElement($permissionStructure)) {
// set the owning side to null (unless already changed)
if ($permissionStructure->getPermissionPartenaire() === $this) {
$permissionStructure->setPermissionPartenaire(null);
}
}
return $this;
}
結構許可.php:
#[ORM\ManyToOne(fetch: "EAGER", inversedBy: 'permission_structure')]
#[ORM\JoinColumn(nullable: false)]
private ?PartenairePermission $permission_partenaire = null;
public function getPermissionPartenaire(): ?PartenairePermission
{
return $this->permission_partenaire;
}
public function setPermissionPartenaire(?PartenairePermission $permission_partenaire): self
{
$this->permission_partenaire = $permission_partenaire;
return $this;
}
uj5u.com熱心網友回復:
現在您必須以不同的方式作業,因為您更改了關聯型別:
$structurePermission = $partenairePermission->getPermissionStructure();
這將回傳一個集合(而不是像以前的一對一關系那樣的單個物件)。
然后是這樣的:
foreach($structurePermission as $permission) {
// here you call your set/get/is for an Object within the Collection
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/517424.html
標籤:交响乐一对多
上一篇:為什么我無法訪問EasyAdmin中的分頁器DTO?
下一篇:找不到相關命令
