sonata_type_model/symfony形成一对多关系而不保存

Rob*_*lca 4 symfony-forms symfony symfony-sonata symfony-2.1 sonata-admin

我在帐户和用户之间有一对多的关系.我正在使用sonata管理员进行CRUD.据我所知,它使用Symfony表单来完成工作.我试图添加这样的字段:

        ->add('users', 'entity', array(
            'class'    => 'AcmeDemoBundle:User',
            'required' => true,
            'multiple' => true,
            'expanded' => true
        ));
Run Code Online (Sandbox Code Playgroud)

我也尝试过sonata_type_model

        ->add('users', 'sonata_type_model', array(
            'class'    => 'AcmeDemoBundle:User',
            'required' => true,
            'multiple' => true,
            'expanded' => true
        ));
Run Code Online (Sandbox Code Playgroud)

问题是,在编辑帐户时(当我编辑用户的所有内容都会更新时),不会保存任何内容(与关系相关).我知道我必须更新拥有方(用户端),但我没有成功,因为"公共函数addUser($ user)"没有被调用所以我不能添加类似"$ user-> setAccount($ this )"到那个功能.

我的实体看起来像这样:

class Account
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string")
 */
protected $name;

/**
 * @ORM\OneToMany(targetEntity="Acme\DemoBundle\User", mappedBy="account", cascade={"persist", "remove"})
 */
protected $users;

/**
 * Add users
 *
 * @param Acme\DemoBundle\Entity\User $user
 * @return Account
 */
public function addUser(\Acme\DemoBundle\Entity\User $user)
{
    $user->setAccount($this);
    $this->users[] = $user;

    return $this;
}

/**
 * Remove users
 *
 * @param Acme\DemoBundle\Entity\User $user
 */
public function removeUser(\Acme\DemoBundle\Entity\User $user)
{
    $user->setAccount(null);
    $this->users->removeElement($user);
}

/**
 * Get users
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getUsers()
{
    return $this->users;
}
}
Run Code Online (Sandbox Code Playgroud)

.

class User extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Account", inversedBy="users")
 */
protected $account;

/**
 * Set account
 *
 * @param Acme\DemoBundle\Entity\Account $account
 * @return User
 */
public function setAccount(\Acme\DemoBundle\Entity\Account $account = null)
{
    $this->account = $account;

    return $this;
}

/**
 * Get account
 *
 * @return Acme\DemoBundle\Entity\Account 
 */
public function getAccount()
{
    return $this->account;
}
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*lca 9

我的问题与此https://github.com/symfony/symfony/issues/1540有关

在我添加by_reference => false之后,调用帐户设置器并且可以更新拥有方.

  • 先生,你是一个被送到死亡床的怜悯天使!在超过20个小时的时间里,我一直在努力寻找和解决如何解决这个看似简单的任务!直到这一刻我才错过了这个叫我的添加功能!非常感谢你在别人痛苦失败的地方取得成功.顺便说一句,索纳塔文件是地狱黑暗领主的产物!再次感谢 (3认同)