我是PHP和Symfony的初学者,最近我开始了一个项目。
我们有两个实体,它们是由教义注释ManyToMany与JoinTable相关联的
例如:实体与数据表Room,entity and datatable Person和datatable RoomPerson (实体不存在,仅存在于理论注释JoinTable中)。
实体室有一个个人财产集合。
使用formType,它在页面中呈现为select html元素多个(因此我们可以选择几个人)
FormType和preEvent一起填写可能的人名单:
$allowedPersons = $this->em->getRepository(Person::class)->findBy(***);
$form
->add('personList', EntityType::class, [
'class' => Person::class,
'choices' => $allowedPersons ,
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Room::class,新的要求是订购人员名单。
因此,我进行了一些教程中描述的更改,以更改声明实体RoomPerson和删除注释( ManyToMany )的ManyToOne和OneToMany。我在RoomPerson上添加了属性"Order“。我添加了AddRoomPerson和RemoveRoomPerson方法,通过映射RemoveRoomPerson来更新列表。
所以我的实体"Room“现在只包含一个RoomPerson的属性集合。但是我不知道如何在我的FormType中使用它,因为我总是想显示人员列表。
我尝试了很多东西,但都没有成功。
示例:
$allowedPersons = $this->em->getRepository(Person::class)->findBy(***);
$form
->add('roomPersonList', EntityType::class, [
'class' => RoomPerson::class,
'choices' => $allowedPersons ,
'choice_value' => function(?RoomPerson $roomPerson) {
return $roomPerson? $roomPerson->getPerson()->getIdPerson() : '';
},
'choice_label' => function(?RoomPerson $roomPerson) {
return $roomPerson? $roomPerson->getPerson()->getName() : '';
},我得到以下错误:
传递给App\Form\RoomPersonType::App\Form{
}()的参数1必须是App\Entity\RoomPerson或null的实例,即在第200行调用的App\Entity\Person给定的实例“
因此,我需要帮助,以转换我的表单类型的RoomPerson列表,并在页面中更新此列表。
发布于 2021-11-26 18:52:50
创建表单时,->add将引用在App\Entity中定义的不同列。
因此,如果您想以这种方式向表单添加某些内容,则必须再次用App\Entity表示它。
现在,您想要做的是,AFAIU用人员填充Room (类Person),并保存房间(RoomPerson)、中的人的列表,以及每个人都在哪里的列表(这就是为什么它是ManyToMany)。
相反,如果您只查看Person是最后一次或现在的位置,那么它是OneToMany关系,因为房间可以容纳一群人,但是任何人每次只能在一个地方(很明显)是。
现在,我将简单地认为您想要实现ManyToMany的情况是理所当然的。您应该拥有Room和Person中所需的所有列。
现在,RoomPerson应该简单地连接这两者,并且它是自己的id。您可以添加更多的内容,但是为了本例的目的,让我们假设我们只需要它是一个简单的关联表,所以.您的表看起来像(例如):
<-M:N->
Room: <-M-> RoomPerson <-N-> Person:
- id (pk) - id (pk) - id (pk)
- space - room_id (fk) - gender
- style - person_id (fk) - room_usage
- purpose - age
- etc etc... - etc etc...M为一边可定位对象的M个数,N为另一侧可定位对象的N个个数。
一旦您有了这样的DB,您就可以简单地创建一个表单,在其中传递一个Room,其中包含您需要的每一行。
如果您想要的是选择一个room 并让所有用户显示,您可以通过查询获取每个房间中所有人员的列表,然后将其发送到表单,然后在模板端上播放html和js,以便在每个房间中显示正确的列表。
我需要一个更精确的描述来确切地知道你想要完成什么。
https://stackoverflow.com/questions/70114021
复制相似问题