[英]Symfony Doctrine - Make fixtures with ManyToMany
我將 Symfony 4.2 與 Doctrine 一起使用,並且我想用兩個實體創建具有 ManyToMany 關系的裝置:
但是當我加載裝置時,連接表(organization_project)總是空的。 所以,我不知道我的人際關系是否良好。
簡歷:
數據庫視圖
這是我的Organization
實體
class Organization
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Project", mappedBy="organizations")
*/
private $projects;
/**
* @return Collection|Project[]
*/
public function getProjects(): Collection
{
return $this->projects;
}
public function addProject(Project $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->addOrganization($this);
}
return $this;
}
public function removeProject(Project $project): self
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
$project->removeOrganization($this);
}
return $this;
}
}
這是我的Project
實體:
class Project
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Organization", inversedBy="projects")
*/
private $organizations
/**
* @return Collection|Organization[]
*/
public function getOrganizations(): Collection
{
return $this->organizations;
}
public function addOrganization(Organization $organization): self
{
if (!$this->organizations->contains($organization)) {
$this->organizations[] = $organization;
}
return $this;
}
public function removeOrganization(Organization $organization): self
{
if ($this->organizations->contains($organization)) {
$this->organizations->removeElement($organization);
}
return $this;
}
}
這是我的Organization
裝置:
class OrganizationFixtures extends Fixture implements DependentFixtureInterface
{
public const ORGANIZATION_REFERENCE = 'organization-';
public function load(ObjectManager $manager)
{
$organization = new Organization();
$this->addReference(self::ORGANIZATION_REFERENCE.'0', $organization);
$organization->addProject($this->getReference('project-0'));
$manager->persist($organization);
$manager->flush();
}
public function getDependencies()
{
return array(
ProjectFixtures::class
);
}
}
這是我的Project
夾具:
class ProjectFixtures extends Fixture
{
public const PROJECT_REFERENCE = 'project-';
public function load(ObjectManager $manager)
{
$project = new Project();
$this->addReference(self::PROJECT_REFERENCE.'0', $project);
$manager->persist($project);
$manager->flush();
}
}
謝謝,
您的Organization
不是關系的擁有方。 它不知道加入表(在ManyToOne
它是關於誰持有外鍵)。 此外,您沒有在persist
上指定級聯,因此不會persist
非擁有方的關聯實體。 因此,對於您當前的夾具結構,最佳關聯方向是這樣的。
class Organization
{
...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Project", inversedBy="organizations", cascade={"persist"})
* @ORM\JoinTable(name="organization_project") # this one is not necessary
putting here for reference
*/
private $projects;
...
]
class Project
{
...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Organization", mappedBy="projects", cascade={"persist"})
*/
private $organizations;
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.