Symfony 2覆盖实体字段属性

时间:2016-04-25 11:03:53

标签: database forms symfony entity

我想覆盖实体字段属性。我需要从另一个数据库表中获取数据(由id映射)。它应该是“artikelnummer”和另一个数据库表中名为“name”的字段的组合。

$builder->add('schlauch', 'entity', array(
    'class' => 'SchlauchBundle:Artikelspezifikation',
    'property' => 'artikelnummer',
    'attr' => array(
      'class' => 'extended-select'
     ),
     'data_class' => null    
));

字段“artikelnummer”输出类似“12345”的内容,但我需要添加名称(来自另一个名为“schlauch”的数据库表),因此它应该看起来像“12345 Articlename”。我在实体文件中尝试了一个查询,但我不想在任何地方操纵输出。

是否可以对属性使用查询并覆盖它?

1 个答案:

答案 0 :(得分:0)

您可以通过向您的实体添加新的getter来简单地解决这个问题:

class Artikelspezifikation
{
    //…

    /**
     * @var Schlauch
     *
     * @ORM\ManyToOne(targetEntity="Schlauch", inversedBy="artikelspezifikations")
     */
    private $schlauch;

    //…

    /**
     * Get display name
     * 
     * @return string
     */
    public function getDisplayName()
    {
        return $this->artikelnummer . ' ' . $this->schlauch->getArtikelName();
    }

    //…

    /**
     * Set schlauch
     *
     * @param \SchlauchBundle\Entity\Schlauch $schlauch
     *
     * @return Artikelspezifikation
     */
    public function setCategory(\SchlauchBundle\Entity\Schlauch $schlauch = null)
    {
        $this->schlauch = $schlauch;

        return $this;
    }

    /**
     * Get schlauch
     *
     * @return \SchlauchBundle\Entity\Schlauch
     */
    public function getCategory()
    {
        return $this->schlauch;
    }
}

在你的表单类中只需更改属性:

$builder->add('schlauch', 'entity', array(
    'class' => 'SchlauchBundle:Artikelspezifikation',
    'property' => 'displayName',
    'attr' => array(
      'class' => 'extended-select'
     ),
     'data_class' => null    
));