ソースに応じて異なるテーブルにリンクしたい「ソース」という名前の特別なフィールドを持つログ テーブルがあります。
ネイティブ SQL では、source_id と source_type の 2 つのフィールドを作成し、適切なテーブルに結合するようにクエリをカスタマイズします。教義でこれを行う方法はあるのだろうか?
編集:
この目的のために継承マッピングを使用できるようです。ただし、別の問題に遭遇します。異なるオブジェクトにマップされるソースと宛先の 2 つのフィールドがあるとしましょう。したがって、オブジェクトはソースまたは宛先のいずれかになる可能性があります。この場合、どうすればよいかわかりません。
Doctrine の例では、Sourceable という名前の親クラスを作成し、それをオブジェクト エンティティに継承させることができるように見えますが、これらのエンティティは Sourceable または Destinationable のいずれかである可能性があり、PHP では複数の継承が許可されていないため、何をすべきかわかりません。
編集2:
この問題をカバーする Ruby ケースを見つけました: https://github.com/spree/spree/blob/master/core/app/models/spree/adjustment.rb
class Adjustment < ActiveRecord::Base
belongs_to :adjustable, polymorphic: true
belongs_to :source, polymorphic: true
belongs_to :originator, polymorphic: true
ソースは、調整がトリガーされた場所です。税およびプロモーションの調整の場合、これは注文自体になります。配送調整の場合、これはこの注文の配送方法に対応する配送になります。
調整可能は、調整されるオブジェクトであり、それが注文です。
オリジネーターは、調整を担当するオブジェクトです。プロモーション調整の場合、これは Spree::Promotion::Actions::CreateAdjustment オブジェクトになります。税金調整の場合は、Spree::TaxRate オブジェクト。配送調整の場合は、Spree::ShippingMethod オブジェクト。
その場合、注文はソースまたは調整可能のいずれかになります。明らかに、この例は Ruby でアクティブ レコードを使用していますが、Doctrine で同じことを行うにはどうすればよいでしょうか?