我试图从已购买的各种产品中保护连续出版物,所以我在发票表,序列表和我的产品表之间建立了关系,关系如下所示。
我已经做了一个表单来添加product_table和invoice_table与serial_table之间的关系,表单是添加关系和连续出版物,但是用户不应该可以选择表之间的关系,它应该找到购买的idproduct和id发票制作并存储连续出版物并将其发送到数据库而无需用户更改,下面是我的表格图片。
这是上面表格中的表格类型
class serialType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('serial','integer')
->add('idPedido')
->add('idProducto')
->add('agregar serial','submit')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'sava\InventarioBundle\Entity\TblProductosSeriales'
// 'inherit_data' => true
));
}
/**
* @return string
*/
public function getName()
{
return 'sava_inventariobundle_serial';
}
}
我使用上面显示的表中的php app/console doctrine:mapping:import
命令导入了我的orm文件。
这是我的产品。
sava\InventarioBundle\Entity\TblProductos:
type: entity
table: tbl_productos
fields:
idProduct:
id: true
type: integer
unsigned: false
nullable: false
column: id_product
generator:
strategy: IDENTITY
lifecycleCallbacks: {
}
我的序列密钥表orm。
sava\InventarioBundle\Entity\TblProductosSeriales:
type: entity
table: tbl_productos_seriales
fields:
idProductoSerial:
id: true
type: integer
unsigned: false
nullable: false
column: id_producto_serial
generator:
strategy: IDENTITY
serial:
type: string
length: 80
fixed: false
nullable: false
manyToOne:
idProduct:
targetEntity: TblProductos
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id_product:
referencedColumnName: id_product
orphanRemoval: false
idinvoice:
targetEntity: TblPedidos
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id_pedido:
referencedColumnName: id_invoice
orphanRemoval: false
lifecycleCallbacks: { }
这是我的发票orm。
sava\InventarioBundle\Entity\TblPedidos:
type: entity
table: tbl_pedidos
fields:
idinvoice:
id: true
type: integer
unsigned: false
nullable: false
column: id_invoice
generator:
strategy: IDENTITY
lifecycleCallbacks: { }
答案 0 :(得分:1)
如果您不希望用户能够选择关系,为什么要将它们添加到表单中?您可以在控制器中设置它们的服务器端:
所以:
让您知道该怎么做:例如,如果您有一个序列号,并希望从中获取您的产品ID
$serial = new Serial;
$form = $this->createForm(new SerialType, $serial);
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form->bind($request);
// if form is valid
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
// get the data sent from your form
$data = $form->getData();
$idSerial = $data->getSerial();
// find your ids according to the serial you just got from the form
$repository = $this->getDoctrine()->getManager()->getRepository('AcmeBundleBundle:Products');
$idProduct = $repository->findBySerial($idSerial);
// hydrate the $serial
$serial->setProduct($idProduct);
$em->persist($serial);
$em->flush();
return ....
}
}
如果你的模板中有id,那么
<form role="form"
action="{{ path('your_route', { 'idProduct': idProduct, 'idInvoice': idInvoice }) }}"
...
</form>
然后你就可以像控件那样把它们放在你的控制器中
UpdateSerialAction($idProduct, $idInvoice)
{
并使用这两个参数
水合表单对象