当前位置: 首页 > 知识库问答 >
问题:

如何在一对多关系Symfony中设置相关实体id?

温浩大
2023-03-14

我试图坚持两个实体,它们有一对一和多对一的关系。

我正在尝试将表单集合嵌入到表单中。

我有一个多对一相关的实体,每次我创建一个新的课程简历,它与Candidat列相关candidat_id_id为空。

除了数据可数据中的Candidat id之外,只有实体Curendar umVitae被成功创建和持久化。

  • 简历表

id|titre|candidat_id_id|id_education

candidat_id_id是:null

id\U教育具有以下价值:条令\公共\收藏\ArrayCollection@000000003d585f990000000052235238

  • 教育表为空

id |描述| id\U履历表\U简历id

我的问题是id\U履历和id\U教育。

简历实体:

/**
 * CurriculumVitae
 *
 * @ORM\Table(name="curriculum_vitae")
 * @ORM\Entity(repositoryClass="GE\CandidatBundle\Repository\CurriculumVitaeRepository")
 */
class CurriculumVitae
{
    /**
     * @var Candidat
     *
     * @ORM\ManyToOne(targetEntity="GE\CandidatBundle\Entity\Candidat")
     */
    protected $candidatId;

    /**
     * @var Education
     * @ORM\OneToMany(targetEntity="GE\CandidatBundle\Entity\Education", mappedBy="idCurriculumVitae", cascade={"persist", "remove"})
     * @ORM\Column(name="id_education")
     */
    protected $educations;

/**
 * Add education
 *
 * @param \GE\CandidatBundle\Entity\Education $education
 *
 * @return CurriculumVitae
 */
public function addEducation(\GE\CandidatBundle\Entity\Education $education)
{
    $this->educations[] = $education;
    $education->setCurriculumVitae($this);
    return $this;
}

/**
 * Remove education
 *
 * @param \GE\CandidatBundle\Entity\Education $education
 */
public function removeEducation(\GE\CandidatBundle\Entity\Education $education)
{
    $this->educations->removeElement($education);
}
}

教育实体:

/**
 * Education
 *
 * @ORM\Table(name="education")
 * @ORM\Entity(repositoryClass="GE\CandidatBundle\Repository\EducationRepository")
 */
class Education
{
    ...
    /**
     * @var CurriculumVitae
     * @ORM\ManyToOne(targetEntity="GE\CandidatBundle\Entity\CurriculumVitae")
     */
    private $idCurriculumVitae;
}

简历控制员:

class CurriculumVitaeController extends Controller
{
    /**
     * Creates a new curriculumVitae entity.
     *
     * @Route("/candidat/cv/ajouter", name="cv_new")
     * @Method({"GET", "POST"})
     */
    public function newAction(Request $request)
    {
        $curriculumVitae = new Curriculumvitae();
        $form = $this->createForm('GE\CandidatBundle\Form\CurriculumVitaeType', $curriculumVitae);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($curriculumVitae);
            $em->flush();
            $request->getSession()
                ->getFlashBag()
                ->add('infoCv', 'Votre cv a été bien enregistrée.');

            return $this->redirectToRoute('cv_show', array('id' => $curriculumVitae->getId()));
        }

        return $this->render('curriculumvitae/new.html.twig', array(
            'curriculumVitae' => $curriculumVitae,
            'form' => $form->createView(),
        ));
    }
}

课程简历类型:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('candidat', EntityType::class, array(
            'class' => 'GECandidatBundle:Candidat',
            'choice_label' => 'id',
            'multiple'      => false,
            ))
            ->add('educations',
                CollectionType::class, [
                    'entry_type' => EducationType::class,
                    'allow_add' => true,
                    'allow_delete' => true,
                    'prototype' => true,
                    'by_reference' => false,
                    'label' => 'Educations:'
                ]
            )
        ;
    }

共有2个答案

屠嘉
2023-03-14

对不起,我发现了我的问题。

必须在控制器中定义id。

$curriculumVitae->setCandidat($candidat);
岳玉堂
2023-03-14

尝试此代码并更新您数据库的模式/** * @var Curendar umVitae*@ORM\ManyToOne(Target etEntity="GE\CandidatBundle\Entity\Curendar umVitae")*@ORM\JoinCol列(name="CandidatId",引用的列名称="id", onDelete="SET NULL")*/Private$idCurendar umVitae;

 类似资料:
  • 两个表格: 实体类(基本结构): SQL查询和结果: JPQL查询: *我知道我在上面给定的结构中没有它,但我想知道如何正确操作。我该如何从“ManyToOne”、“OneToOne”等选项中进行选择。 如何修改实体类和JPQL查询以获得与SQL查询相同的结果?我一直在尝试各种各样的事情,但都不管用。它不允许我创建两个具有相同列名的字段,也不允许我将字符串定义为@JoinColumn。我几乎成功了

  • 问题内容: 有一个实体类“ A”。A类可能具有相同类型“ A”的子级。如果“ A”是孩子,则也应保留它的父母。 这可能吗?如果是这样,我应该如何在Entity类中映射关系?[“ A”有一个id列。] 问题答案: 是的,这是可能的。这是标准双向@ManyToOne/ @OneToMany关系的特例。之所以特别是因为关系两端的实体都是相同的。JPA 2.0规范的第2.10.2节详细介绍了一般情况。 这

  • 我的实体之间存在多对多关系:和。当我想在我的Symfony项目中将添加到订单时,我总是收到以下错误消息: 属性“suppliers”在类“Acme\AppBundle\Entity\PurchaseOrder”中不是公共的。也许您应该创建方法“setSuppliers()”? 当我自己在Entity中创建函数时: 我收到以下错误消息: 可捕获的致命错误:传递给Doctrine\通用\集合\Arra

  • 我有如下三个实体: -available-teams(由管理员管理) -player-preconfig(由管理员管理) -player-self](由User(Player本身)管理) 在此输入图像说明 可用团队: -->所有可用团队 player-preconfig: -->在这里,管理员可以预选允许玩家参加的队伍。(first-filter-many2many:available-teams

  • 我有如下三个实体: -available-teams(由管理员管理) -player-preconfig(由管理员管理) -player-self](由User(Player本身)管理) 在此输入图像说明 可用团队: -->所有可用团队 player-preconfig: -->在这里,管理员可以预选允许玩家参加的队伍。(first-filter-many2many:available-teams

  • 救命啊!我只在一对多关系数据库中插入POJO时遇到问题。我有POJO和误解如何插入数据库中的所有列表??? 请帮帮我伙计们!