Сборщик запросов Symfony2 не работает - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь создать простую форму с пакетом сонат. У меня есть одна проблема, пытаясь загрузить поле типа объекта данных. Я знаю, что это работает:

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

Проблема в том, что я не хочу показывать идентификатор сущности, я хочу показать его имя, которое находится в реляционной таблице. Я попытался использовать оператор join в методе createQueryBuilder, но у меня ничего не вышло:

$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 голосов
/ 16 февраля 2012

Вы должны создать метод __toString() для сущности, которую вы используете, Symfony автоматически использует ее в качестве метки.

Edit: В вашем классе 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',
));       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...