在FormType symfony2

时间:2015-05-19 12:57:44

标签: symfony

我在ClutchType

中包含此代码
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $currentUser = $this->currentUser;
    $builder
        ->add('breedingPair')
        ->add('breedingPair', 'entity', array(
            'class' => 'Breedr\BreedingPairsBundle\Entity\Pairs',
            'property' => 'id',
            'property' => 'breeding_pair_male',
            'placeholder' => 'Choose a breeding pair',
            'query_builder' => function(EntityRepository $er) use ($currentUser) {
                return $er->createQueryBuilder('br')
                    ->where('br.user = :currentUser')
                    ->orderBy('br.breedingPairDate')
                    ->setParameter('currentUser', $currentUser);
            }
        ))
        ->add('laidDate')
        ->add('estimatedHatchStart')
        ->add('estimatedHatchEnd')
        ->add('hatchDate')
        ->add('eggAmount')
        ->add('breedingSeason')
    ;
}

哪种方法可以正常工作并将雄性带入繁殖对中。我该怎么做才能在下拉列表中显示男性和女性的名字?我试过了:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $currentUser = $this->currentUser;
    $builder
        ->add('breedingPair')
        ->add('breedingPair', 'entity', array(
            'class' => 'Breedr\BreedingPairsBundle\Entity\Pairs',
            'property' => 'id',
            'property' => 'breeding_pair_male',
            'property' => 'breeding_pair_female',
            'placeholder' => 'Choose a breeding pair',
            'query_builder' => function(EntityRepository $er) use ($currentUser) {
                return $er->createQueryBuilder('br')
                    ->where('br.user = :currentUser')
                    ->orderBy('br.breedingPairDate')
                    ->setParameter('currentUser', $currentUser);
            }
        ))
        ->add('laidDate')
        ->add('estimatedHatchStart')
        ->add('estimatedHatchEnd')
        ->add('hatchDate')
        ->add('eggAmount')
        ->add('breedingSeason')
    ;
}

但显然你不能在房产中显示多个价值。

所以我现在的样子是这样的:

Dropdown

但我希望它能显示出彼此相邻的男性和女性名字。目前它只是拉着男性的名字。

这是我的SQL表,显示男性和女性的ID

enter image description here

1 个答案:

答案 0 :(得分:2)

property调用中的->add('breedingPair', 'entity'选项可以设置为您喜欢的任何用户定义的方法,因此在您的Breedr\BreedingPairsBundle\Entity\Pairs实体中,您可以定义一个返回所需字符串的方法,例如

public function getPairAsString()
{
    return sprintf(
        '%s & %s', 
        $this->breedingPairMale->getName(), 
        $this->breedingPairFemale->getName()
    );
}

然后在ClutchType中添加字段,如下所示:

$builder->add('breedingPair', 'entity', array(
    'class' => 'Breedr\BreedingPairsBundle\Entity\Pairs',
    'property' => 'pairAsString',
    'placeholder' => 'Choose a breeding pair',
    'query_builder' => function(EntityRepository $er) use ($currentUser)         {
        return $er->createQueryBuilder('br')
            ->where('br.user = :currentUser')
            ->orderBy('br.breedingPairDate')
            ->setParameter('currentUser', $currentUser);
    }
))