具有此架构:
我想制作一个这样的表格
我不知道如何构建表格。
这里的角色是用来说明工人的角色。
公司
class Company
{
/**
* @ORM\Column(type="string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="CompanyPerson", mappedBy="company")
*/
private $companypersons;
}
人员
class Person
{
/**
* @ORM\Column(type="string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="CompanyPerson", mappedBy="person", cascade={"persist"})
* @var ArrayCollection
*/
private $companypersons;
}
状态
class Status
{
/**
* @ORM\Column(type="string", length=45, nullable=true)
*/
private $libelle;
/**
* @ORM\OneToMany(targetEntity="CompanyPerson", mappedBy="statut")
*/
protected $companypersons;
}
公司人员
class CompanyPerson
{
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $dateAdded;
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="companypersons",
cascade={"persist"})
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity="Person",
inversedBy="companypersons", cascade={"persist"})
*/
private $person;
/**
* @ORM\ManyToOne(targetEntity="Status",
inversedBy="companypersons", cascade={"persist"})
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity="CompanyPerson", inversedBy="childrens")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="CompanyPerson", mappedBy="parent")
*/
private $childrens;
public function __construct(Company $companay= null, Person $person =
null, CompanyPerson $parent = null, Status $status = null)
{
$this->companay = $companay;
$this->person = $person;
$this->parent = $parent;
$this->status = $status;
$this->childrens = new ArrayCollection();
}
}
我处理了带有集合的嵌入表单,但是由于它对我来说并不复杂,因此我无法创建该表单。
答案 0 :(得分:1)
在映射中存在理性问题。您应该在Person
而非CompanyPerson
中使用父子模式。这里的CompanyPerson
是一个联合实体。在那里可以保存诸如:
$dateAdded
:建立Company
和Person
与Status
之间的关系的日期。人员
class Person
{
/**
* @ORM\Column(type="string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="CompanyPerson", mappedBy="person", cascade={"persist"})
* @var ArrayCollection
*/
private $companypersons;
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="childrens")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="parent")
*/
private $children;
}
请注意,children
不应包含s
,因为它已经是复数形式。
还请记住在关联的反面对映射定义使用cascade
操作。所以
class CompanyPerson
{
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="companypersons", cascade={"persist"})
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="companypersons", cascade={"persist"})
*/
private $person;
}
应该是
class CompanyPerson
{
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="companypersons")
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="companypersons")
*/
private $person;
}
避开所谓的复杂表格!您可以在字段中使用mapped=false
设置属性。使用此方法,您可能会告诉symfony该字段未映射到表单目标实体的属性。
在您的情况下,您拥有CompanyType
表单(以Company
作为目标实体),并希望一次性创建所有这些东西!因此,您可以在表单中添加未映射的字段,并在控制器内捕获主题并根据需要解析主题。
使用这种方法,您应该自己(同样在控制器内部)创建联合实体(例如Company-Person)。