我有两个实体(Customer& PhoneNumber),它们通过ManyToMany连接彼此实现。
当尝试以一种形式显示两个实体时,我使用以下语句:
$customer = new Customer();
$customer->addPhoneNumber(new PhoneNumber());
$form = $this->createForm(new CustomerType(), $customer, array(
'action' => $this->generateUrl('customer_add'),
));
在确认表格后,我需要检查表格中的PhoneNumber部分是否已被使用,因为输入电话号码不是必需的。我需要这样做的原因是:当试图持有一个连接了PhoneNumber-Entity且没有设置值的客户(= NULL值)时,我从数据库中得到一个NOT NULL-Error。
所以我的工作是:在验证表格后,如果没有输入电话号码,我会将电话号码 - 实体 - 关系删除给客户。
$phoneNumber = $customer->getPhoneNumbers()->first();
if(empty($phoneNumber->getPrefix()) && empty($phoneNumber->getNumber())) {
$customer->removePhoneNumber($phoneNumber);
}
这会导致以下问题:
有没有更好的方法来做我想在这里做的事情?
Customer.php:
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\PhoneNumber", mappedBy="customers", cascade={"persist"})
* @Assert\Valid()
**/
protected $phoneNumbers;
PhoneNumber.php:
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Customer", inversedBy="phoneNumbers", cascade={"persist"})
* @ORM\JoinTable(name="cp_relation")
**/
protected $customers;
CustomerType.php:
# ...
->add('phoneNumbers', 'collection', array(
'type' => new PhoneNumberType(),
'options' => array(
'required' => false,
)
))
答案 0 :(得分:3)
正如聊天室中所讨论的,最佳解决方案是使用collection type
并设置allow_add=true
并使用jQuery
& prototype
字段,允许用户添加字段。
但在您的情况下(因为您不想使用jquery
并依赖js
),您可以将静态字段渲染为(不要忘记设置allow_add=true
):
<input type="email" id="form_emails_0" name="form[emails][0]" value="" /><br>
<input type="email" id="form_emails_1" name="form[emails][1]" value="" />