我正在尝试使用奏鸣曲包创建一个简单的表单。我在尝试加载数据实体类型字段时遇到一个问题。我知道这是有效的:
$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'
) );
任何人都知道如何做到这一点?
感谢。
答案 0 :(得分:0)
您应该对正在使用的实体进行__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
}
Doctrine将在关联中延迟加载(如果您使用低/单数的标签,则不是问题)...我已经有效地使用此方法来执行您所描述的内容
<?php
$b->add('foo', 'entity', array(
'class' => 'myVendorMyBundleBundle:Foo',
));