[英]Symfony2 : Entity Field Type Saves Zero
我想在表单中使用“实体”作为字段类型,并在下拉列表中显示记录的名称,并将所选选项的ID保存到数据库中。
这是我的FormType:
namespace Acme\DemoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityRepository;
use Acme\DemoBundle\Entity\Person;
class ContactType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('subject')
->add('content')
->add('personid','entity', array(
'class' => 'Acme\DemoBundle\Entity\Person',
'query_builder' => function(EntityRepository $repository) {
return $repository->createQueryBuilder('q');
}))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\DemoBundle\Entity\Contact'
));
}
/**
* @return string
*/
public function getName()
{
return 'acme_demobundle_contact';
}
}
它从数据库加载记录列表,并在html表单的标记中以正确的选项和值(记录的ID)在下拉列表中显示它们,但不将选项的值(记录的ID)保存到数据库。
如果我使用_toString(),Symfony不会显示任何错误,而是保存“ 0”而不是id,并且如果我不使用_toString()并设置“'property'=>'name',”,则会显示此错误:
ContextErrorException: Catchable Fatal Error: Object of class <Path to Entity> could not be converted to string in /symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php line 855
我在这里遵循了Symfony的文档: http : //symfony.com/doc/current/reference/forms/types/entity.html,但是没有找到解决方案。
怎么了 ?
请粘贴整个表单类,我可以为您修复。 同时,您不应该使用常规的“ id”,而应该使用关联。
更新*
public function setPerson(Person $person)
{
$this->person = $person;
return $this;
}
还要确保您正确设置了ORM(Contact.orm.xml),例如:
<many-to-one field="person" target-entity="Your\Bundle\Entity\Person">
<join-columns>
<join-column name="idp" referenced-column-name="id"/>
</join-columns>
</many-to-one>
问题出在您的Acme \\ DemoBundle \\ Entity \\ Person实体中。 表单需要以某种方式表示每个Person实体,因此您需要一个魔术方法。
请将此方法添加到实体:
public function __toString() {
return $this->getName(); // You should return whatever field you feel is needed
}
这种方法是一种魔术方法。 可以在这里找到更多信息
解决了 !
对于其他可能遇到相同问题的朋友,我在这里说明:
错误出在我的实体关系映射中。
我遵循此文档:
http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata
并更改了注释和yml配置,然后执行以下命令行:
php app/console doctrine:generate:entities Acme
现在工作正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.