我有一个日志表,其中有一个名为“source”的特殊字段,我想根据来源链接到不同的表。
使用本机sql,我会做类似于创建2个字段的内容:source_id和source_type然后自定义查询以连接到适当的表。我想知道是否有办法用学说做到这一点?
编辑:
似乎我可以为此目的使用继承映射。然而,我遇到了另一个问题:让我说我现在有两个字段:源和目标映射到不同的对象。所以一个对象可以是源或目的地,我不知道在这种情况下该怎么做。
在Doctrine示例中,看起来我可以创建一个名为Sourceable的父类,然后让我的对象实体继承它,但是现在因为这些实体可以是Sourceable或Destinationable而且PHP不允许多重继承我不知道是什么要做。
EDIT2:
我找到了一个涵盖此问题的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对象。对于运输调整,a Spree :: ShippingMethod对象。
在他们的情况下,订单可以是来源或可调整。显然这个例子是红宝石并有活跃记录,但我想知道我如何用Doctrine做同样的事情?