2011-04-26 56 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,折扣的可能性開放。