Отображение атрибута ActiveRecord в PHP-класс в Yii2 - PullRequest
1 голос
/ 01 апреля 2019

Предыстория:

У меня есть Microsoft SQL Server в качестве СУБД за моим REST API Yii2.SQL Server имеет свои внутренние типы данных: geography и geometry.Технически, с точки зрения PDO, эти типы являются двоичными строками PHP

Вопрос:

Итак, мне нужен прозрачный способ сопоставления столбцов этих типов, например, с моим классом MyApp\Geometry.То есть я должен иметь возможность:

  1. получить доступ к свойству экземпляра ActiveRecord как Geometry экземпляр (например, $model->geometryBorders->someGeometryTransformation();
  2. сохранить экземпляр ActiveRecord с Geometry преобразованием свойства с помощью __toString()метод

По второму пункту - мне кажется, это понятно (насколько я понимаю, механизм PDO автоматически конвертирует все значения в строковый тип PHP перед отправкой их в СУБД), но о первомДело в том, что я не знаю, как реализовать его в архитектуре Yii2

Итак, есть ли способ сопоставить атрибут ActiveRecord с классом PHP? Я верю, что кто-то уже сталкивался с этой проблемой раньше.

1 Ответ

1 голос
/ 01 апреля 2019

Вы можете использовать метод afterFind() или событие afterFind, чтобы использовать объект из БД.

public function afterFind() {
    parent::afterFind();
    $this->geometryBordersObject = Geometry::fromString($this->geometryBorders);
}

И выполнить обратную операцию перед сохранением (beforeSave() метод или beforeInsert и beforeUpdate события):

public function beforeSave() {
    $this->geometryBorders = $this->geometryBordersObject->toString();

    return parent::beforeSave();
}

Вы также можете попробовать использовать методы получения и установки для предоставлениявиртуальные атрибуты, но это может быть сложно с объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...