Symfony2 querybuilder联接在用于联接的Sonata捆绑包中不起作用


Symfony2 querybuilder join not working in Sonata bundle for join

我正试图用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',
));