У меня есть 3 модели Yii2 ActiveRecord: Emplpoyee
, Department
и Organization
.
Employee
должен иметь либо один Department
, либо один Organization
, что обеспечивается проверкой (сбой, если оба значения department_id
и organization_id
равны null
или оба не null
). Department
должен иметь один Organization
, это стандартное отношение yii2 ORM через hasOne()
.
Gii создал этот код для отношения сотрудника / организации:
class Employee
{
public function getOrganization()
{
return $this->hasOne(app\models\Organization::class, ['id' => 'organization_id']);
}
}
Поэтому, когда я позвоню $employeeObject->organization
, я получу null
, если organization_id
в таблице SQL равно нулю.
Я хочу изменить эту стандартную функцию получения так, чтобы она возвращала $this->department->organization
, чтобы иметь возможность получить $employee->organization
через магический метод получения, как это: если у сотрудника есть отдел - организация получает из отдела, в противном случае - через стандартное отношение.
Обновление: , если я напишу:
/**
* @return ActiveQuery
*/
public function getOrganization()
{
if (!is_null($this->organization_id)) {
return $this->hasOne(app\models\Organization::class, ['id' => 'organization_id']);
} elseif (!is_null($this->department)) {
return $this->department->getOrganization();
} else {
// We should not be here, but what if we are?
}
}
Как мне справиться с ситуацией разрыва связи с Department
или с обоими organization_id
и department_id
является null
? Какие ActiveQuery
я должен вернуть?