Doctrine orm Symfony2形式与条令关系持续性问题

Doctrine orm Symfony2形式与条令关系持续性问题,doctrine-orm,relationship,symfony-forms,persist,Doctrine Orm,Relationship,Symfony Forms,Persist,我有3个实体,它们的属性。 具有多个用户技能的用户,每个用户都有一个对应的技能 以下是实体: /** * @ORM\Table(name="skills") * @ORM\Entity() */ class Skill { /** * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $i

我有3个实体,它们的属性。 具有多个用户技能的用户,每个用户都有一个对应的技能

以下是实体:

/**
 * @ORM\Table(name="skills")
 * @ORM\Entity()
 */
class Skill
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(name="name", type="string", length=30, unique=true)
     */
    private $name;

    /**
     * @ORM\Column(name="active", type="boolean")
     * @var bool
     */
    private $active = false;

    /**
     * @ORM\OneToMany(targetEntity="UserSkill", mappedBy="skill")
     */
    private $userSkills;
}


/**
 * @ORM\Table(name="user_skill")
 * @ORM\Entity()
 */
class UserSkill
{

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="User", inversedBy="skills")
     * @var User
     */
    private $user;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Skill", inversedBy="userSkills")
     * @var Skill
     */
    private $skill;

    /**
     * @ORM\Column(type="integer")
     * @var int
     */
    private $level = 0;
}

/**
 * StartupDriven\UserBundle\Entity\User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="StartupDriven\UserBundle\Entity\UserRepository")
 */
class User implements AdvancedUserInterface, \Serializable
{
    /**
     * @ORM\OneToMany(targetEntity="UserSkill", mappedBy="user")
     * @var ArrayCollection
     */
    private $skills;
}
它们是使用2个symfony形式的对象创建的,这些对象工作得非常出色

问题是当我将这些对象持久化到控制器中时。。。。我犯了一个错误

$form->handleRequest($request);

if ($form->isValid()) {

    /**
     * @var User $user
     */
    $user = $form->getData();

    /**
     * @var UserSkill $userSkill
     */
    foreach ($user->getSkills() as $userSkill) {

        // No updating skills... Only new ones.
        if (!$userSkill->getId()) {

            // Check skill name match.
            if ($matched_skill = $em->getRepository('StartupDrivenUserBundle:Skill')->findOneBy(array('name' => $userSkill->getName()))) {
                $userSkill->setSkill($matched_skill);
            }
            else {

                // No match. Create new generic skill.
                $em->persist($userSkill->getSkill());

                // THE ERROR HAPPENS ON THE FOLLOWING LINE!
                $em->flush();
            }

            // Set the User
            $userSkill->setUser($user);

            // Persist the user skill.
            $em->persist($userSkill);
            $em->flush();
        }
    }

    $em->persist($user);
    $em->flush();
错误消息: 通过关系“StartupDriven\UserBundle\entity\Userskills”找到了一个新实体,该关系未配置为级联实体的持久化操作:StartupDriven\UserBundle\entity\UserSkill@0000000053e8628e00007f7f2fd56e1f. 要解决此问题,请在此未知实体上显式调用EntityManagerpersist,或在映射中配置cascade persist此关联,例如@ManyTone..,cascade={persist}。如果无法找到导致问题的实体,请执行“StartupDriven\UserBundle\entity\UserSkill\uuuu toString”以获取线索

我已经尝试了我能想到的每一种坚持和冲水的组合。我尝试了上面的级联选项,它给出了一个不同的错误,即主键规则所需的用户id没有设置。。。我完全迷路了。这似乎是一段如此简单的关系。。。我哪里做错了