Добрый день.
Есть сущность "пользователь" и две дочерних сущности "подрядчик" и "заказчик". Модель User содержит методы общие для обоих наследников и метод getType(), который определяет кем является текущий пользователь.
Мне нужно, чтобы метод find возвращал объект класса Employee или Customer, в зависимости от его типа. Что-то вроде:
public function find($condition='', array $params=[]) {
$user = parent::find($condition, $params);
return ($user->getType() == 'customer')
? <Модель заказчика>
: <Модель подрядчика>;
}
Но как сделать из текущего класса экземпляр класса наследника? Просто присвоение атрибутов не прокатит т.к. много приватных свойств.
Единственный выход, который я вижу - это внутри метода делать запрос на выборку объекта для одного из наследников. Вроде следующего:
public function find($condition='', array $params=[]) {
$user = parent::find($condition, $params);
return ($user->getType() == 'customer')
? Customer::model()->findByPk($user->id)
: Employee::model()->findByPk($user->id);
}
Но это решение видится мне несколько костыльным.
Подскажите, как организовать такой метод?