Symfony2 querybuilder加入不起作用

时间:2012-02-15 16:33:29

标签: php symfony doctrine-orm

我正在尝试使用奏鸣曲包创建一个简单的表单。我在尝试加载数据实体类型字段时遇到一个问题。我知道这是有效的:

$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'
) );                

任何人都知道如何做到这一点?

感谢。

1 个答案:

答案 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',
));