我正试图用sonata bundle创建一个简单的表单。我在尝试加载数据实体类型字段时遇到一个问题。我知道这是有效的:
$formMapper->add( 'foo', 'entity', array(
'class' => 'myVendorMyBundleBundle:Foo',
'property' => 'id',
'query_builder' => function(FooRepository $er) {
return $er->createQueryBuilder('qb')
->add( 'select', 'f' )
->add( 'from', 'myVendorMyBundleBundle:Foo f' )
},
'label' => 'foo'
) );
问题是我不想显示实体id,我想显示它的名称,它在一个相关的表中。我尝试在createQueryBuilder方法中使用join语句,但没有成功:
$formMapper->add( 'foo', 'entity', array(
'class' => 'myVendorMyBundleBundle:Foo',
'property' => 'b.name',
'query_builder' => function(FooRepository $er) {
return $er->createQueryBuilder('qb')
->add( 'select', 'f' )
->add( 'from', 'myVendorMyBundleBundle:Foo f' )
->add( 'join', 'myVendorMyBundleBundle:Bar b' )
},
'label' => 'foo'
) );
我该怎么做?
您应该在正在使用的实体上创建一个__toString()
方法,Symfony会自动将其用作标签。
编辑:在myVendorMyBundleBundle:Foo
类中,应该有一个变量$bar
定义的
<?php
// ../app/src/myVendor/MyBundleBundle/Entity/Foo.php
public function __toString()
{
// If relationship is many to one or one to one
return $this->bar->getSomeProperty();
//If relationship is one to many or many to many
$return_var = '';
foreach($this->bars as $bar)
{
$return_var .= $bar->getSomeProperty() . ' ';
}
return $return_var
}
条令会在协会中产生惰性负载(如果你使用的标签数量很少/单一,这不是问题)。。。我已经有效地使用了这种方法来做你所描述的
<?php
$b->add('foo', 'entity', array(
'class' => 'myVendorMyBundleBundle:Foo',
));