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

标签 doctrine-orm symfony-2.8

请帮忙,我有一个表 orders,其中包含 total_priceexchange_code(其中包含货币代码,如 USD)、exchange_rate(包含货币汇率,例如:1.7)。

现在我想创建一个虚拟字段“exchangedTotalPrice”,其中包含 ExchangedTotalPrice = ExchangeRate * TotalPrice。

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

如果您需要任何内容​​或不理解我的查询,请发表评论。

最佳答案

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

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。因此将依次使用您上面定义的方法。

<小时/>

Twig

同样的情况也会发生在 Twig 上..

{{ Orders.exchangedTotalPrice }}

这还将调用新字段上的 getter。

Ive not tested any of this, so you might need to debug.

关于doctrine-orm - Symfony2 - 有没有办法在实体中创建虚拟字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43447023/

相关文章:

doctrine-orm - 学说2标准 - 像运算符

php - 为什么在原则 2 中需要安全唤醒和克隆方法?

php - 如何测试对象是否持久保存在数据库 Symfony/PHPUnit 中

mysql 查询到 querybuilder

php - 命名约定 : singular vs plural for classes describing entities in PHP

php - 在 Symfony 4/5 中安装 orm-fixtures 时 Composer 发生冲突

php - 如何在没有鉴别器列的情况下从 Doctrine-Entity 进行扩展

php - 如何在 symfony 表单中对表单类型使用组序列?

php - Symfony 2.8:ResourceInterface::isFresh() 自 2.8 起已弃用

php - 在 Symfony 中访问 wordpress 博客