Symfony2 - 有没有办法在实体中创建虚拟字段?

时间:2017-04-17 07:19:12

标签: doctrine-orm symfony-2.8

请帮助,我有orderstotal_priceexchange_code(包含货币代码,如美元),exchange_rate(包含货币汇率如:1.7)。

现在,我想在这里创建一个虚拟字段“exchangeTotalPrice'这将包含interchangeTotalPrice = exchangeRate * totalPrice。

我不想在数据库中创建单独的列,因为我的db表中已有太多列,而我的要求是创建更多虚拟字段。

如果您需要或不了解我的查询,请发表评论。

1 个答案:

答案 0 :(得分:2)

您可以使用特定方法提供所需内容(如评论中所述)。

public function getExchangedTotalPrice() 
{
     // do the maths and return the result.

     $result = $this->exchangeRate * $this->totalPrice; 

     return $result;
}

有趣的是,你可以在形式或许多其他地方挂钩。

<强>表格

如果您有一个表格,例如,建筑物看起来像这样:

public function buildForm(FormBuilderInterface $builder, array $options)
{

     //... some other builder stuff here
     $builder->add('exchangedTotalPrice', TextType::class, [
         'mapped' => false,                // this will stop the setter being called on submit
     ]);
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'allow_extra_fields' => true,     // youll need this to allow the extra field element
    ]);
}

当symfony尝试填充表单时,它将尝试根据字段名称调用getter和setter。因此,将依次使用您定义的方法。

<强>枝条

在树枝上会发生同样的事情。

{{ Orders.exchangedTotalPrice }}

这也会在新字段上调用getter。

  

我没有测试过这些,所以你可能需要调试。