Как определить поля модели с помощью idiorm/granada, не нарушая функциональность ORM?

PHP-норма Granada на основе Idiorm работает следующим образом для извлечения полей из базы данных:

class ORM {
  ...

  public function __get($key) {
    return $this->get($key);
  }
}

class ORMWrapper extends ORM {
  ...

  public function get($key) {
        if (method_exists($this, 'get_' . $key)) {
            return $this->{'get_' . $key}();
        } elseif (array_key_exists($key, $this->_data)) {
            return $this->_data[$key];
        }
        elseif (array_key_exists($key, $this->ignore)) {
            return $this->ignore[$key];
        }
        // and so on ...
  }

Моя проблема в том, что если я определю public $field в моих модельных классах магический метод __get не вызывается, и поэтому ORM не получает поле из базы данных?

Как я могу

  • Быть в состоянии объявить public $field в моих модельных классах
  • По-прежнему называть магическим добытчиком, если $field не определено

В то же время?

1 ответ

Все, что я на самом деле хотел сделать, - это иметь автозаполнение, работающее с Ne tBeans.

Просто объявив, что мои классы Model так и сделали:

/**
 * @property int $address_id
 * @property Address $address
 * @property String $name
 * ...
 */
class Activity extends Model {

    public function address() {
      return $this->belongs_to('Address');
    }

//...
}

Таким образом я могу сделать

$activity->address->name;

И у меня есть завершение и ORM, оба работают.

Другие вопросы по тегам