EasyAdminBundle: OneToMany is not working in update ie) cascade={persist}
I have two entities called Project(OneToMany) and Project Members(ManyToOne). I want to add my project members in project entity itself. Removing project member is working with orphanRemoval=‘true’ But Adding project member is not working with cascade={“persist”}. Need some help to complete the project.
EasyAdmin version : 1.17.9
Project.php
class Project
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var bool
*
* @ORM\Column(name="status", type="boolean")
*/
private $status;
/**
* @ORM\OneToMany(targetEntity="ProjectMember", mappedBy="project", cascade={"persist"})
*/
private $projectMembers;
/**
* @ORM\OneToMany(targetEntity="TimeEntry", mappedBy="project")
*/
private $timeEntries;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Project
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set status
*
* @param boolean $status
*
* @return Project
*/
public function setStatus($status)
{
$this->status = $status;
return $this;
}
/**
* Get status
*
* @return bool
*/
public function getStatus()
{
return $this->status;
}
/**
* Constructor
*/
public function __construct()
{
$this->projectMembers = new \Doctrine\Common\Collections\ArrayCollection();
$this->timeEntries = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add projectMember
*
* @param \App\Entity\ProjectMember $projectMember
*
* @return Project
*/
public function addProjectMember(\App\Entity\ProjectMember $projectMember)
{
$this->projectMembers[] = $projectMember;
return $this;
}
/**
* Remove projectMember
*
* @param \App\Entity\ProjectMember $projectMember
*/
public function removeProjectMember(\App\Entity\ProjectMember $projectMember)
{
$this->projectMembers->removeElement($projectMember);
}
/**
* Get projectMembers
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getProjectMembers()
{
return $this->projectMembers;
}
/**
* Add timeEntry
*
* @param \App\Entity\TimeEntry $timeEntry
*
* @return Project
*/
public function addTimeEntry(\App\Entity\TimeEntry $timeEntry)
{
$this->timeEntries[] = $timeEntry;
return $this;
}
/**
* Remove timeEntry
*
* @param \App\Entity\TimeEntry $timeEntry
*/
public function removeTimeEntry(\App\Entity\TimeEntry $timeEntry)
{
$this->timeEntries->removeElement($timeEntry);
}
/**
* Get timeEntries
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getTimeEntries()
{
return $this->timeEntries;
}
public function __toString()
{
return (string) $this->name;
}
}
Project Member.php
class ProjectMember
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="project_id", type="integer")
*/
private $projectId;
/**
* @var int
*
* @ORM\Column(name="user_id", type="integer")
*/
private $userId;
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="projectMembers")
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $project;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="projects")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set projectId
*
* @param integer $projectId
*
* @return ProjectMember
*/
public function setProjectId($projectId)
{
$this->projectId = $projectId;
return $this;
}
/**
* Get projectId
*
* @return int
*/
public function getProjectId()
{
return $this->projectId;
}
/**
* Set userId
*
* @param integer $userId
*
* @return ProjectMember
*/
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
/**
* Get userId
*
* @return int
*/
public function getUserId()
{
return $this->userId;
}
/**
* Set project
*
* @param \App\Entity\Project $project
*
* @return ProjectMember
*/
public function setProject(\App\Entity\Project $project = null)
{
$this->project = $project;
return $this;
}
/**
* Get project
*
* @return \App\Entity\Project
*/
public function getProject()
{
return $this->project;
}
/**
* Set user
*
* @param \App\Entity\User $user
*
* @return ProjectMember
*/
public function setUser(\App\Entity\User $user = null)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return \App\Entity\User
*/
public function getUser()
{
return $this->user;
}
public function __toString()
{
return (string) $this->user;
}
}
Help me out to complete the issue
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 22
Hello @harikumar99
ProjectMembers is a collection so it must be treated as so.
Please take a look at this example :
https://knpuniversity.com/screencast/easyadminbundle/collection-type
Best Regards
@uncle-scrooge @fralazar
I didn’t resolve this issue. I didn’t get exact result yet. By setting “by_reference:flase” to Project member field and check in browser shows exception
An exception has been thrown during the rendering of a template (“Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string”).
easyadmin.yaml Project: class: App\Entity\Project list: title: “Projects” form: fields: - ‘name’ - {property: ‘ProjectMembers’, type_options: { by_reference: false }}