我有3个实体。 Customers
,Products
和Purchases
。
应该可以通过单击“添加另一个购买”按钮添加新的购买表单。每次购买都是DB中的一个单独行。
我尝试过使用一个集合来为客户填写/添加必要数量的表单以供现有购买,但我不知道如何使用按钮添加其他购买表单。此外,在添加新客户时,不会显示任何购买表单。
我已经坚持了好几天!请帮助
创建如下表单的最佳方法是什么:
名字
姓氏
电子邮件
[添加另一个购买按钮]
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;
}
答案 0 :(得分:1)
您是否在官方文档中查看了该示例?
http://symfony.com/doc/master/cookbook/form/form_collections.html
它还有一个关于如何使用javascript添加新表单集合的示例。