相同的表,symfony中的两个实体(或类)

时间:2016-06-05 14:38:18

标签: forms symfony doctrine

我想构建两个引用同一个表的类。

例如:
表发票:
idInvoice,IdClient,idProduct。

我有一个显示一般信息的实体(idClient和idInvoice),而且我有一个允许我显示动态生成表单的实体(id Product)。

对于每张发票,我需要一件或多件产品,因此我应该可以为不同的产品插入不同的行。

如何在同一张桌子上链接这些不同的实体? 当我提交表单时,我需要从产品信息和客户端的所有数据中提取所有数据,然后我需要在MySQL上插入。

我有ORDER TABLE和PRODUCT TABLE。它们是一对多的关系(一个订单,更多的产品。)我创建了两个实体:订单和产品,这些是类:

订购课程

namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;


/**
* @ORM\Entity
* @ORM\Table(name="ordini")
*/

class Ordine
{

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */

protected $idOrdine;



    /**
     * 
     * @ORM\OnetoMany(targetEntity="Prodotto", cascade={"persist"},    
  mappedBy="prodotto")
     * 
     */
 protected $prodotti;

/**
 * Get idOrdine
 *
 * @return integer 
 */
public function getIdOrdine()
{
    return $this->idOrdine;
}

public function __costruct() 
 {
$this->prodotti= new ArrayCollection(); 
}


 public function setProdotti(ArrayCollection $prodotti) 
 {
 $this->prodotti = $prodotti;
  //return $this;
 }


public function addProdotti(Prodotto $prod) {
$this->prodotti[] = $prod;
return $this;
}

public function addProdotto(Prodotto $prodotto) {
$this->prodotti[] = $prodotto;
$prodotto->setOrdine($this);
return $this;
}

public function getProdotti() {
return $this->prodotti;
}
}

产品类别

namespace AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="prodotto")
 */
class Prodotto
{

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $idProdotto;


 /**
 * @ORM\Column(type="string", length=100, nullable=TRUE)
  * 
 */
protected $modello;

/**
 * @ORM\ManyToOne(targetEntity="Ordine", inversedBy="prodotti")
 *  @var AppBundle\Entity\Ordine
*/
  protected $ordini;



/**
 * Get idProdotto
 *
 * @return integer 
 */
public function getIdProdotto()
{
    return $this->idProdotto;
}

/**
 * Set modello
 *
 * @param string $modello
 * @return Prodotto
 */
public function setModello($modello)
{
    $this->modello = $modello;

    return $this;
}

/**
 * Get modello
 *
 * @return string 
 */
public function getModello()
{
    return $this->modello;
}
}

然后我创建了一个表单,允许我创建订单(发票),我可以动态生成产品字段。 我应该是正确的方式,但现在它给了我一个错误:

  

“Doctrine \ Common \ Collections \ ArrayCollection”类型的预期参数,
      给出“阵列”

我的OrderForm是:

namespace AppBundle\Form\Documentofiscale;
use Symfony\Component\Form\TextField;
use Symfony\Component\Form\Checkbox;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use AppBundle\Entity\Prodotto;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;


class FormDocumentoFiscale extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
//    $builder->add('idCliente');
  //$builder->add('save', 'submit', array('label' => 'INSERISCI    
  DOCUMENTO'));
    $builder->add('prodotti', 'collection', array(
    'type' => new FormAggiuntaProdotti(),
       'allow_add'    => true,
       'by_reference' => false,
    )
           );

$builder->add('save', 'submit', array('label' => 'INSERISCI      
DOCUMENTO'));
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Ordine',
    ));
}

public function getName()
{
    return 'documento';
}
}

我动态生成的表格是:

namespace AppBundle\Form\Documentofiscale;

use Symfony\Component\Form\TextField;
use Symfony\Component\Form\Checkbox;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use AppBundle\Entity\Prodotto;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class FormAggiuntaProdotti extends AbstractType
{

 public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('modello');
////    $builder->add('idCliente');
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Prodotto',
    ));
}

public function getName()
{
    return 'prodotto';
}
}

0 个答案:

没有答案