在创建JoinTable(1-n-1)的实体后,无法向ManyToMany添加值

时间:2013-12-08 21:05:19

标签: symfony

起初我在User和Club实体之间有一个ManyToMany关系。 现在,我想在JoinTable(users_clubs)中添加一列,因此我必须创建第三个实体UserClub。我运行了学说:schema:update --force命令,一切似乎没问题。

我的ProfileForm设置有一个Entity字段,如下所示:

->add(
  'clubs', 'entity', array(
    'class' => 'AcmeMainBundle:Club',
    'property' => 'name',
    'multiple' => 'true',
    'query_builder' => function(EntityRepository $er) 
    {
      return $er->createQueryBuilder('club')
        ->orderBy('club.name', 'ASC');
    },
  )
)

表单呈现效果不错但保存表单时出现此错误:

Catchable Fatal Error: Argument 1 passed to Acme\UserBundle\Entity\User::addClub() must be  an instance of Acme\MainBundle\Entity\UserClub, instance of Acme\MainBundle\Entity\Club given in /src/Acme/UserBundle/Entity/User.php

用户实体addClub功能:

/**
 * Add clubs
 *
 * @param UserClub $userClub
 * @return User
 */
public function addClub(UserClub $userClub)
{
    if (!$this->userClubs->contains($userClub)) 
    {
        $this->userClubs->add($userClub);
        $userClub->setUser($this);
    }

    return $this;
}

2 个答案:

答案 0 :(得分:0)

->add(
  'clubs', 'entity', array(
    'class' => 'AcmeMainBundle:Club',
    'property' => 'name',
    'multiple' => 'true',
    'query_builder' => function(EntityRepository $er) 
    {
      return $er->createQueryBuilder('club')
        ->orderBy('club.name', 'ASC');
    },
  )
)

您可以发布您的用户实体吗? 您的用户俱乐部是否在您的用户实体中被命名为用户俱乐部?

如果是:

->add(
  'userclubs', 'entity', array(....

不是:

->add(
  'clubs', 'entity', array(

答案 1 :(得分:0)

我按照本指南解决了这个问题:

http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html

我更改了我的addClub功能,并添加了一个setClubs功能,负责在新的UserClub实体中设置俱乐部和用户。