我有一個綁定到Tolerance實體的Project實體。Symfony2以動態方式分配「子」實體的嵌入表單
表面上項目只有一個容差,所以它似乎是一對一的,但實際上我想跟蹤容差實體中的所有更改。爲此,每次保存項目時,如果公差實體字段發生更改,我想保存一個新的「版本」容差,記錄時間戳記以及誰執行了更改。
在可視化中,每次用戶看到一個項目或編輯項目時,都會看到附加的最後一個版本的容差。
問題是我不知道如何從窗體的角度來管理事物。
由於公差實體可以被引用到項目以外的其他東西,所以我有ProjectTolerance擴展了Tolerance。
這是項目實體:
/**
* @ORM\Entity(repositoryClass="AppBundle\Entity\ProjectRepository")
* @ORM\Table(name="projects")
*/
class Project
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
//other fields
這是基本公差:
/** @ORM\MappedSuperclass */
class Tolerance
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
protected $risk;
/**
* @ORM\Column(type="integer")
*/
protected $scope;
// other fields
/**
* @ORM\Column(type="datetime")
*/
protected $timestamp;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
protected $changedBy;
public function __construct()
{
$this->timestamp = new \DateTime();
}
這是擴展:
/**
* @ORM\Entity(repositoryClass="AppBundle\Entity\ProjectToleranceRepository")
* @ORM\Table(name="project_tolerances")
*/
class ProjectTolerance extends BaseTolerance
{
/**
* @ORM\ManyToOne(targetEntity="Project")
*/
protected $project;
/**
* Set project
*
* @param \AppBundle\Entity\Project $project
* @return ProjectTolerance
*/
public function setProject(\AppBundle\Entity\Project $project = null)
{
$this->project = $project;
return $this;
}
我需要指定的關係在項目實體中,作爲oneToMany關係嗎?我想如果我這樣做,我需要調整「getTolerance」,以便它獲得最後一個版本的公差...
如何管理表單?
編輯:這裏是形式的創造,因爲它是現在(在控制器內,我會拿出來作爲一個獨立的表單類型):
$form = $this->createFormBuilder($project)
->add('name', 'text')
->add('approach', 'text')
->add('background', 'text')
->add('scope', 'text')
->add('scopeExclusions', 'text')
->add('interfaces', 'text')
->add('save', 'submit', array('label' => 'Create project'))
->getForm();
$form->handleRequest($request);
什麼我缺少的可能是什麼如:
$builder->add('tolerances', 'collection', array('type' => new ProjectToleranceFormType(), 'allow_add' => true, 'label' => false,
'by_reference' => false,
))
謝謝!
謝謝,我認爲這是一個開始,但這將是一個標準的一對多的香草解決方案,但在我的情況下,我需要一對一的行爲作爲一對一。我需要一個getTolerance(注意不帶「s」)來檢索最後應用的公差。 –
容差存儲在[ArrayCollection](http://www.doctrine-project.org/api/common/2.2/class-Doctrine.Common.Collections.ArrayCollection.html)中,所以只需調用:$ project - > getTolerances() - > last(); –
您能分享我如何編寫formBuilder來告訴它必須獲得可視化中的最後一個嗎?這是唯一缺失的片段 –