我有一个问题,我试图从一个不同于主表单实体的实体中获取一个多选字段。
我的数据库中有不止一个表,主表(我们称之为“person”)要求表单呈现包含来自不同实体的多个选项。让我们添加2个,例如,它们是“语言”和“技能”,其中语言有自己的实体,可以有几种语言,技能是相同的,所以当你添加一个新的人时,表单应该从各自的表中呈现“语言”和“技能”,我不使用关系实体,因为这是一个快速mvp,我很快就完成了,所以我决定使用CSV格式,所以我想要的是得到这些值,将它们打印为多个选项(复选框),当我添加一个新的“person”时,它会得到所选的值,并将它们添加到相应的person表字段中,这没有问题,因为它只是处理发布的数据,问题是表单打印。
我正在这么做。
为每个实体添加实体
use App\Entity\Language;
use App\Entity\Skill;
在表格的PersonType中
在$builder里我有这个
->add('language', EntityType::class, [
'class' => Language::class,
'choice_label' => 'language',
'multiple' => true,
'expanded' => true,
])
然而,它总是出错,它也找不到那个标签,我明白为什么在“Person”表单中,语言字段被呈现为“Person_language”而不是“language”,但如果我将其更改为“language”,错误就会告诉我它在“language”类中找不到标签“language”。
有没有办法在不建立一对多关系的情况下解决这个问题?(一个人可以有多种语言)
在必须使用关系的情况下,多对一应该在其他表上,而不是个人上吗?
或者,如果我选择一对多,那么这群关系应该去哪里?当面或者我该怎么做?
我对教义的这一部分不是很有经验,所以让我解释一下。
Person是主表,然后我们有“语言”、“技能”、“whatever1”和“whatexxx”表,Person可以有尽可能多的“与Person记录相关联的其他表记录”,但不能反过来。尽管反向搜索功能不错,但它不是我想要的,我想要的是,当我必须向数据库中添加一个新的“人”时,我希望能够从多个选项中进行选择,但它可能会呈现在屏幕上,来自其他实体的所需值作为选项,而不是相反。
所以,如果我添加了一个新的人,我需要能够(但不需要)从其他表的数据的多选列表中选择值,但我必须能够向其他表添加数据,而不影响表中的人,也不需要为他们选择人,其他表是绝对独立和封闭的,只有人必须与其他表有关系。
干杯并提前表示感谢,