Symfony formtype查询构建器关联

时间:2018-01-10 00:15:50

标签: php symfony doctrine-orm associations symfony-forms

我使用Symfony 3.2,我希望有一个与另一个实体相关联的实体的表单类型:

class Aliment
    // ...
    private enseigneId;
    // ...

class Enseigne
    // ...
    private nomEnseigne
    // ...

和Aliment.enseigneId指的是Enseigne.id,但我想在我的表单中创建(CRUD,用于创建一个)是让用户选择一个ID,但我想显示该ID的值,所以对用户来说更容易。

这就是我的表单类型(票证):

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('date', DateTimeType::class, array(
            'data' => new \DateTime()
        ))
        ->add('aliments')
        ->add('prixTotal')
        ->add('recapitulatif')
        ->add('modePaiement')
        ->add('enseigneId', EntityType::class, array(
            'class' => 'AppBundle\Entity\Enseigne',
            'choice_label' => function ($enseigne) {
                /** @var $enseigne Enseigne */
                return $enseigne->getNomEnseigne();
            }

        ));
}

但它继续显示整数0(而getNomEnseigne()返回一个字符串,数据库充满了正确的数据集),我不知道该怎么做.. 我希望它存储为整数,但我希望显示(在选择字段中)作为它引用的Id的值。

Id | nomEnseigne | ...
-----------------------
0  | LECLERC     | ...
1  | LIDL        | ...

通过上面的例子,用户可以看到字符串" LECLERC"但是会存储整数0。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以尝试其他方式,例如

'choice_label' => 'nomEnseigne',

或实现Enseigne实体的__toString()方法

/**
 * @return string
 */
public function __toString()
{
    if (empty($this->nomEnseigne) {
        return 'enseigne ' . $this->id;
    }

    return (string) $this->nomEnseigne;
}