yii2 Виртуальное поле модели атрибут (не существующий в БД) + обращение к hasOne() через $this -- Пример кода

В этом примере мы создадим виртуальное поле модели, которое для своего определения использует связь модели hasOne() с другой сущностью -- т.е. нам нужны два метода:

/**
 *  Метод опреляющий связь
 *
 * @return \yii\db\ActiveQueryInterface
 */
public function getOrganization()
{
	
	return $this->hasOne(Organization::className(), ['_id' => 'organization_id']);
}


/**
 * Метод  (геттеры) задающий определение виртуального атрибута organization_name
 * 
 * @return type
 */
public function getOrganization_name()
{
	$name = 'Не_установлено'; //  значение по умолчанию

	if (!empty($this->Organization->view_name)) { // если удалось извлечь реальные данные
		$name  = $this->Organization->view_name;
	}
	
	return $name;
}

Где:

  • Organization -- класс модели, который связан с данным через поле organization_id
  • organization_name -- вирутальный атрибут данной модели

В методе getOrganization_name() делается проверка, так как подразумевается, что к данной модели в данной момент может быть ещё не прикреплена ни одна организация.

После такого описания атрибут organization_name можно получать как и реальные атрибуты, например:

$orgName = $model->organization_name;