【问题标题】:Mapping ActiveRecord attribute to PHP class in Yii2Yii2 中将 ActiveRecord 属性映射到 PHP 类
【发布时间】:2019-04-01 01:34:38
【问题描述】:

史前史:

我的 Yii2 REST API 后面有 Microsoft SQL Server 作为 DBMS。 SQL Server 有其内部数据类型:geographygeometry。从技术上讲,就 PDO 而言,这些类型是 PHP 二进制字符串

问题:

因此,例如,我需要一种透明的方式将这些类型的列映射到我的班级MyApp\Geometry。 那就是我应该能够:

  1. Geometry 实例访问ActiveRecord 实例属性(例如$model->geometryBorders->someGeometryTransformation();
  2. 通过__toString()方法保存带有Geometry属性转换的ActiveRecord实例

截至第二点 - 我看起来很清楚(据我了解,PDO 引擎会在将所有值发送到 DBMS 之前自动将它们转换为 PHP 字符串类型),但关于第一点 - 我不知道如何在 Yii2 架构中实现它

那么,有没有办法将 ActiveRecord 属性映射到 PHP 类? 我相信,以前有人遇到过这个问题。

【问题讨论】:

    标签: php sql-server activerecord yii2 geometry


    【解决方案1】:

    您可以使用afterFind() 方法或afterFind 事件从数据库中用户化对象。

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

    并在保存前进行反向操作(beforeSave() 方法或beforeInsertbeforeUpdate 事件):

    public function beforeSave() {
        $this->geometryBorders = $this->geometryBordersObject->toString();
    
        return parent::beforeSave();
    }
    

    您也可以尝试使用 getter 和 setter 来提供虚拟属性,但使用对象可能会很棘手。

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多