Прозрачное изменение значения возвращаемого значения через ORM

#php #oop #orm #model #kohana

#php #ооп #orm #Модель #kohana

Вопрос:

У меня есть аппаратное обеспечение модели ORM. И аппаратное обеспечение имеет отношение к типу модели ORM. Мне нужна опция get из аппаратной модели, например:

 $hardware->option 
 

Но если опция пуста, я хочу получить опцию из типа model:

 $hardware->type->option
 

Я хочу сделать это автоматически (прозрачно) в аппаратном orm. Я сделал:

 public function __get($column) {

    if($column == 'option') {

        if ($this->option != null) {
            return $this->option;
        } else {
            // if option equals null then use value from type of this hardware
            return $this->type->captive_portal;
        }
    }

    return parent::__get($column);
}
 

Но это не работает. Потому что $this->опция не работает, потому что сначала мне нужно вызвать родительский метод __get для работы с отношениями. Но я не могу вызвать родительский метод __get и после него получить истинное значение. Или может?

Ответ №1:

Это работает хорошо 😉

 public function __get($column) {
    if($column == 'option') {
        return $this->getOption( parent::__get($column) );
    } else {
        return parent::__get($column);
    }
}

public function getOption($thisValue) {

    if ($thisValue != null) {
        return $thisValue;
    } else {
        // if option equals null then use value from type of this hardware
        return $this->type->option;
    }
}