2017-04-17 14 views
2

私はテーブルorderstotal_priceexchange_code(それは米ドルのような通貨コードを含む)、exchange_rate(1.7のような通貨レートを含む)があります。Symfony2 - エンティティに仮想フィールドを作成する方法はありますか?

ここで、exchangedTotalPrice = exchangeRate * totalPriceを含む仮想フィールド 'exchangedTotalPrice'を作成します。

すでにデータベーステーブルに列が多すぎるため、データベースに別の列を作成したくないため、より多くの仮想フィールドを作成する必要があります。

何かが必要な場合や質問がわからない場合は、ご意見ください。

+0

なぜ、単に 'public function getExchangedTotalPrice(){return $ this-> exchangeRate * $ this-> totalPrice; } '? –

+0

返信ありがとうございます。だから私は、クエリビルダや関数の検索でこの関数を使用することはできますか? – Vikash

答えて

1

あなたは必要なものを提供するために特定の方法を使用することができます(コメントのように)。

興味深いのは、あなたがフォームや他の多くの場所でこれにフックできることです。


フォーム

あなたはこのようなものに見えるビルダーで、インスタンスのフォームを持っている場合:

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 }} 

...小枝に発生します。

私はこれをテストしていませんので、デバッグする必要があります。

+0

あなたのサポートをありがとう。それは私の状況にとって非常に役立ちます。 :) – Vikash

+0

大歓迎、幸運! – DevDonkey

関連する問題