【问题标题】:Yii2 override on condition in relation for postgres array data typeYii2 覆盖与 postgres 数组数据类型相关的条件
【发布时间】:2019-01-12 07:02:57
【问题描述】:

我正在尝试在 Yii2 中创建与 postgres 数组列的关系,它给了我一个错误(不足为奇)

SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: integer[] = integer

仅设置标准 onCondition() 似乎不起作用。

任何人都有处理 postgres 数组类型和 Yii2 关系的经验吗?如果我能做这样的事情来覆盖默认运算符并在条件下支持数组列类型,那就太好了。

/**
 * @return \yii\db\ActiveQuery
 */
public function getMyRelation()
{
    return $this->hasMany(ModelName::className(), ['@>', 'id', '{'.intval($this->rel_id).'}'])->alias('myRelation');
}

【问题讨论】:

    标签: postgresql yii2


    【解决方案1】:

    您不能以这种方式创建 hasMany 关系 - ActiveRecord 不支持这种语法并且您不能使用模型属性来定义关系,因为此方法可能在真正的模型初始化之前执行(例如,如果您正在构建加入)。

    您可以创建将使用ActiveQuery 获取相关模型的getter - 它不是真正的关系,您将无法将其用于预加载或连接,但对于单个模型的延迟加载应该可以正常工作:

    public function getMyRelation() {
        $query = ModelName::find()
            ->andWhere(['@>', 'id', '{'. (int) $this->rel_id .'}'])
            ->alias('myRelation');
        $query->primaryModel = $this;
        $query->multiple = true;
        return $query;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多