【问题标题】:sonata_type_model / symfony form one to many relationship not savingsonata_type_model / symfony 形成一对多关系不保存
【发布时间】:2012-12-15 22:29:09
【问题描述】:

我在帐户和用户之间建立了一对多的关系。我正在为 CRUD 使用奏鸣曲管理员。据我所知,它使用 Symfony 表单来完成工作。我尝试添加这样的字段:

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

我也试过sonata_type_model

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

问题是在编辑帐户时(与关系相关的)没有任何东西被保存(当我编辑用户时,一切都得到更新)。我知道我必须更新拥有方(用户方),但我没有成功,因为没有调用“public function 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;
}
}

.

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;
}
}

【问题讨论】:

    标签: symfony symfony-2.1 symfony-forms symfony-sonata sonata-admin


    【解决方案1】:

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

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

    【讨论】:

    • 您是一位仁慈的天使,被送到我的临终前! 20 多个小时以来,我一直在为如何解决这个看似简单的任务而苦苦挣扎、寻找和哭泣!直到这一刻,我才错过了这是在调用我的 add 函数!非常感谢你在别人痛苦地失败的地方取得了成功。顺便说一句,奏鸣曲文档是地狱黑暗领主的产物!所以再次感谢
    • Zjoia 完美地描述了我现在的感受,谢谢老兄
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多