1

我有 3 个实体。Customers, Products, 和Purchases.

应该能够通过单击添加另一个购买按钮来添加新的购买表格。每个购买都是数据库中的一个单独的行。

我尝试使用一个集合来为客户的现有购买填充/添加必要数量的表格,但我不知道如何有一个按钮来添加额外的购买表格。此外,添加新客户时,不会显示购买表格。

我已经坚持了好几天了!!请帮忙

创建如下表单的最佳方法是什么:

添加/编辑新客户

客户资料

名字

电子邮件

购买 [添加另一个购买按钮]

  1. 选择产品(用户服务从产品实体中检索的下拉菜单)- 输入数量
  2. 选择产品(用户服务从产品实体中检索的下拉菜单)- 输入数量
  3. 选择产品(用户服务从产品实体中检索的下拉菜单)- 输入数量

[添加另一个购买按钮]


CustomersType 类

class CustomersType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('first_name')
            ->add('last_name')
            ->add('email')
            ->add('purchases', 'collection', array(
                'type'   => new PurchasesType(),
                'allow_add' => true,
                ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\Bundle\MyBundle\Entity\Customers',
        ));
    }

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


PurchasesType 类

class PurchasesType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('products', 'entity', array(
                'class'         => 'My\Bundle\MyBundle\Entity\Products',
                'query_builder' => function ($repository) { return $repository->createQueryBuilder('p')->orderBy('p.name', 'ASC'); }
            ))
            ->add('quantity')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\Bundle\MyBundle\Entity\Purchases',
        ));
    }

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


客户类

class Customers
{
    /** 
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /** 
     * @ORM\Column(type="string")
     */
    private $first_name;

    /** 
     * @ORM\Column(type="string")
     */
    private $last_name;

    /** 
     * @ORM\Column(type="string")
     */
    private $email;

    /** 
     * @ORM\ManyToOne(targetEntity="Users", inversedBy="customers")
     * @ORM\JoinColumn(name="users", referencedColumnName="id")
     */
    private $users;

    /** 
     * @ORM\OneToMany(targetEntity="Purchases", mappedBy="customers")
     */
    private $purchases;
}


产品实体

class Products
{
    /** 
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /** 
     * @ORM\Column(type="string")
     */
    private $name;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=2)
     */
    private $price = 0.0;

    /** 
     * @ORM\OneToMany(targetEntity="Purchases", mappedBy="products")
     */
    private $purchases;

    /** 
     * @ORM\ManyToOne(targetEntity="Users", inversedBy="products")
     * @ORM\JoinColumn(name="users", referencedColumnName="id")
     */
    private $users;
}


采购实体

class Purchases
{
    /** 
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=2)
     */
    private $price;

    /**
     * @ORM\Column(type="integer")
     */
    private $quantity;

    /** 
     * @ORM\ManyToOne(targetEntity="Products", inversedBy="purchases")
     * @ORM\JoinColumn(name="products", referencedColumnName="id")
     */
    private $products;

    /**
     * @ORM\ManyToOne(targetEntity="Customers", inversedBy="purchases")
     * @ORM\JoinColumn(name="fans", referencedColumnName="id")
     */
    private $customers;
}
4

1 回答 1

1

您是否浏览过官方文档中的示例?

http://symfony.com/doc/master/cookbook/form/form_collections.html

它还有一个关于如何使用 javascript 添加新表单集合的示例。

于 2013-08-20T14:16:28.597 回答