情景:
客户表:id(PK),customer_name,地址
Customer_detail表:id(PK),customer_id(FK),电话,电子邮件
信用表:id(PK),customer_id(FK),credit_code,description
客户详细信息中存在单向一对一关系,客户表中存在信用关系。
我为两者创建了实体类和表单类型。我可以插入单独的表格。
我希望显示这样的表单,输入的值应该插入到相应的表中。
客户名称:___________________
地址:________________________
电话:__________________________
电子邮件:__________________________
信用代码:____________________
信用说明:_____________
我发现我必须写$ builder-> add(' customer',new CustomerType());这个代码以客户详细信息的形式出现在我的客户表单中。但是,在三个实体的情况下,我如何合并表格?
信用表与客户明细表无关?
表格图:
答案 0 :(得分:1)
我在这里看不到任何问题, 1.创建一个CustomerType表单:
...
$builder->add('customer_name')->add('address', 'textarea');
...
'data_class' => 'Vendor\Bundle\Entity\Customer'
2。创建CustomerDetailType:
...
$builder->add('customer', new CustomerType())->add('phone')->add('email', 'email');
...
'data_class' => 'Vendor\Bundle\Entity\CustomerDetail'
3。创建一个MyFormType:
...
$builder->add('customer_details', new CustomerDetailType()/* this field requires 'mapped' => false option and it will be handled manually */)->add('credit_code')->add('description', 'textarea');
...
'data_class' => 'Vendor\Bundle\Entity\Credit'
另外,您应该查看Doctrine的cascade
选项..
PS // 在这种情况下,我通常会这样:客户与CustomerDetails有关系,CustomerDetails与Credit有关系:
Customer:
- field: customerDetails
CustomerDetails:
- field: credit
之后嵌入的表单将如下所示:
信用:
...
$builder->add('credit_code')->add('description', 'textarea');
...
'data_class' => 'Vendor\Bundle\Entity\Credit'
为CustomerDetails:
...
$builder->add('phone')->add('email', 'email')->add('credit', new CreditType());
...
'data_class' => 'Vendor\Bundle\Entity\CustomerDetail'
CustomerType:
...
$builder->add('customer_name')->add('address', 'textarea')->add('customerDetail', new CustomerDetailType());
...
'data_class' => 'Vendor\Bundle\Entity\Customer'
使用cascade persist
选项FormComponent和Doctrine自动保存实体..