这可能是Symfony2中的一个巨大错误,或者我只是没有得到它。我花了几天时间试图了解这里发生了什么。我有两个实体:
Event
Date
我想要一个关系,一个事件有很多日期。听起来很简单,所以在我的Event实体中我有:
/**
* @ORM\OneToMany(targetEntity="Date", mappedBy="event")
*/
protected $dates;
在我的Date实体中,我有:
/**
* @ORM\ManyToOne(targetEntity="Event", inversedBy="dates")
*/
private $event;
我还在Event实体上生成了一个CRUD(doctrine:generate:crud),以便我可以向数据库添加事件。在我的EventType中的表单构建器中,我添加了:
->add('date', new DateType())
根据Symfony文档,我可以在表单中包含日期字段。
现在出现了我的问题。
每当我运行doctrine:generate:实体我的实体都是在Event和Date实体上创建的,但它们似乎是错误的方法。在我的Event实体上,我得到:
/**
* Constructor
*/
public function __construct()
{
$this->dates = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add dates
*
* @param \Raygun\EventBundle\Entity\Date $dates
* @return Event
*/
public function addDate(\Raygun\EventBundle\Entity\Date $dates)
{
$this->dates[] = $dates;
return $this;
}
/**
* Remove dates
*
* @param \Raygun\EventBundle\Entity\Date $dates
*/
public function removeDate(\Raygun\EventBundle\Entity\Date $dates)
{
$this->dates->removeElement($dates);
}
/**
* Get dates
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getDates()
{
return $this->dates;
}
在我的日期实体上我得到:
/**
* Set event
*
* @param \Raygun\EventBundle\Entity\Event $event
* @return Date
*/
public function setEvent(\Raygun\EventBundle\Entity\Event $event = null)
{
$this->event = $event;
return $this;
}
/**
* Get event
*
* @return \Raygun\EventBundle\Entity\Event
*/
public function getEvent()
{
return $this->event;
}
现在当我尝试加载表单时,我可以将事件/日期添加到我得到的数据库
Neither the property "date" nor one of the methods "getDate()", "date()", "isDate()", "hasDate()", "__get()" exist and have public access in class "Raygun\EventBundle\Entity\Event".
就像它应该将getter和setter添加到Event实体,而不是Date实体。我真的用这个撕掉了我的头发,我想完全抛弃Symfony,因为它似乎完全违背了逻辑。
答案 0 :(得分:0)
如果您希望表单组件自动填充字段,则应将date
字段更改为dates
:
->add('dates', 'collection', [
'type' => new DateType()
])
或者您可以在mapped => false
字段中添加date
选项以手动映射。
答案 1 :(得分:0)
您的活动表单类型应包含protected $dates
字段的集合类型,因此该行不正确:
->add('date', new DateType())
应该是:
->add('dates', 'collection', array('type' => new DateType()))
请查看有关如何使用表单集的Symfony cookbook条目:
http://symfony.com/doc/current/cookbook/form/form_collections.html