2011-04-26 101 views
1

我一直在为实现Doctrine2实体归档以下内容而陷入困境。Doctrine2 inheretance and overloading

我尽我所能解释。

我想要为不同的任务/工作提供基本费率。就像工作一样:以50.00的比率洗衣服。 然后每个客户都可以*覆盖此工作和费率。所以客户:妻子,工作:洗衣服的费用为65.00。

因此,对于每个客户,我希望能够做到像$ customer-> getJobRate(洗衣店), 之类的东西,并且如果客户具有该作业的具体实现,它将返回特定的费率,如果没有具体的实施如果返回默认比率则被发现。

我可能在想这太难了,但是我能想出的所有解决方案对我来说都很“丑陋”。

感谢, 约翰

回答

1

的标准方法是将有3个实体:CustomerJobCustomerJobRate。相关属性是:

Customer: 
    jobRates (OneToMany => CustomerJobRate) 

Job: 
    defaultRate (float) 

CustomerJobRate: 
    job (ManyToOne => Job) 
    customer (ManyToOne => Customer) 
    rate (float) 

getJobRate()可以在Customer像你描述的实现:

public function getJobRate(Job $job) { 

    foreach($this->jobRates as $jobRate) { 
     if($jobRate->getJob()->getId() === $job->getId()) 
      return $jobRate->getRate(); 
    } 

    return $job->getDefaultRate(); 
} 

这让你添加更多的信息,例如CustomerJobRate,折扣的可能性开放。