как обрабатывать отношения многих тонов в форме

Я пытаюсь защитить серийные номера от различных уже купленных продуктов, поэтому я установил связь между таблицей счетов, таблицей серий и таблицей своих продуктов, отношения показаны ниже.

таблицы

я уже сделал форму для добавления отношений между product_table и invoice_table с serial_table, форма добавляет отношения и сериалы, но пользователь не должен быть доступен для выбора отношений между таблицами, он должен найти idproduct и Идентификатор счета-фактуры от покупки сделал и сохранить сериалы и отправить его в базу данных без изменения пользователем, ниже изображение моей формы.

форма

это тип формы из формы выше

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';
}
}

я импортировал мои файлы Orm с 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: {  }

это мой счет-фактура.

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. получить данные вашей формы
  2. запросить базу данных с идентификатором из вашей формы, чтобы получить два других
  3. увлажнить объект (formObject-> setStuff ($ id))
  4. упорствовать

Чтобы дать вам представление о том, что делать: например, если у вас есть серийный номер и вы хотите получить из него идентификатор продукта

  $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 ....
}
}

если у вас есть идентификаторы в вашем шаблоне, сделайте

<form role="form"action="{{ path('your_route', { 'idProduct': idProduct, 'idInvoice': idInvoice }) }}"...
</form>

И тогда вы можете просто получить их в свой контроллер, как так

UpdateSerialAction($idProduct, $idInvoice)
{

и гидрировать объект формы с этими двумя аргументами

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]