2014-11-03 6 views
0

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

tables

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

form

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

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 команды из таблиц, приведенных выше.

это мой товар.

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: { 

}

мой серийный ключ таблицы ОРМ.

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: { } 

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

ответ

1

Если вы не хотите, чтобы пользователь мог выбрать отношение, по которому вы добавляете их в форму? Вы можете установить их на стороне сервера, в контроллере:

так:

  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) 
{ 

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

+0

Спасибо за ответ. Хорошо, теперь я понимаю, что мне нужно ввести идентификатор из таблицы продуктов и счетов в последовательную таблицу.Однако я не вижу, как я собираюсь найти идентификатор с серийным номером, который я предоставил с формой, если отношение не существует в данный момент. Поэтому я думаю, есть ли в любом случае, что я могу отправить идентификатор или связанные данные из таблицы продуктов и счетов? На странице, где вы просматриваете форму, отображаются данные, относящиеся к таблице счетов и продуктов. Как я могу отправить эти данные контроллеру, должен ли я сделать другую форму или использовать одну и ту же серийную форму. – 2one2

+0

, так что, наверное, у вас есть идентификатор продукта и идентификатор счета в вашем шаблоне ветки, где отображается форма? – oligan

+1

Большое спасибо, ваш ответ действительно помог мне. – 2one2