Я пытаюсь защитить серийные номера от различных уже купленных продуктов, поэтому я установил связь между таблицей счетов, таблицей серий и таблицей своих продуктов, отношения показаны ниже.
я уже сделал форму для добавления отношений между 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: { }
Если вы не хотите, чтобы пользователь мог выбирать отношения, почему вы добавляете их в форму? Вы можете установить их на стороне сервера, в контроллере:
так :
Чтобы дать вам представление о том, что делать: например, если у вас есть серийный номер и вы хотите получить из него идентификатор продукта
$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)
{
и гидрировать объект формы с этими двумя аргументами
Других решений пока нет …