首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不按预期工作的Symfony2实体关系

不按预期工作的Symfony2实体关系
EN

Stack Overflow用户
提问于 2014-12-30 14:54:28
回答 2查看 263关注 0票数 0

这要么是Symfony2中的一个巨大错误,要么就是我没有得到它。我花了几天的时间来了解这里到底发生了什么。我有两个实体:

代码语言:javascript
复制
Event
Date

我想要一段有很多次约会的关系。听起来很简单,所以在我的事件实体中有:

代码语言:javascript
复制
/**
 * @ORM\OneToMany(targetEntity="Date", mappedBy="event")
 */
protected $dates;

在我的约会实体里我有:

代码语言:javascript
复制
/**
 * @ORM\ManyToOne(targetEntity="Event", inversedBy="dates")
 */
private $event;

我还在事件实体上生成了CRUD (原则:generate:crud),以便将事件添加到数据库中。在我的EventType中的表单生成器中,我添加了:

代码语言:javascript
复制
->add('date', new DateType())

这样,我就可以按照Symfony文档在表单中包含日期字段。

我的问题来了。

每当我运行原则:生成:实体我的实体是在事件和日期实体上创建的,但它们似乎是错误的。在我的活动实体中,我得到:

代码语言:javascript
复制
/**
 * 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;
}

在我的约会实体里我得到:

代码语言:javascript
复制
/**
 * 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;
}

现在,当我尝试加载表单时,我可以将事件/日期添加到数据库中。

代码语言:javascript
复制
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添加到事件实体中,而不是日期实体。我真的把我的头发弄得乱七八糟,我正在考虑完全抛弃Symfony,因为它似乎完全违背了逻辑。

EN

回答 2

Stack Overflow用户

发布于 2014-12-30 15:32:50

如果希望表单组件自动映射字段,则应将date字段更改为dates

代码语言:javascript
复制
->add('dates', 'collection', [
    'type' => new DateType()
])

或者,可以将mapped => false选项添加到date字段中,以手动映射它。

票数 0
EN

Stack Overflow用户

发布于 2014-12-30 15:36:03

事件窗体类型应该包含protected $dates字段的集合类型,因此这一行不正确:

代码语言:javascript
复制
->add('date', new DateType())

它应该是:

代码语言:javascript
复制
->add('dates', 'collection', array('type' => new DateType()))

请看一下关于如何使用表单集合的Symfony烹饪书条目:

collections.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27707606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档