Doctrine2 унаследование и перегрузка - PullRequest
1 голос
/ 26 апреля 2011

Я был озадачен лучшим способом реализации сущностей Doctrine2 для архивирования следующего.

Я приложу все усилия, чтобы объяснить.

Я хочу иметь базовые ставки для различных задач / заданий.Понравилась работа: стирать со скоростью 50,00.Тогда каждый клиент может * переопределить эту работу и оценить.Таким образом, клиент: жена, работа: стирать со скоростью 65,00.

Поэтому для каждого клиента я бы хотел иметь возможность сделать что-то вроде $ customer-> getJobRate (стирка), и если у клиента естьконкретная реализация этой работы возвращает конкретную скорость, если конкретная реализация не найдена, если возвращает частоту по умолчанию.

Возможно, я слишком много думаю об этом, но все решения, которые я могу придумать, кажутся мне "безобразными".

Спасибо, Джон

1 Ответ

1 голос
/ 26 апреля 2011

Стандартным способом было бы иметь 3 объекта: Customer, Job, CustomerJobRate.Соответствующие свойства могут быть:

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 например, скидка.

...