Yii2在与Postgres数组数据类型有关的条件上重写

时间:2019-01-12 07:02:57

标签: postgresql yii2

我试图在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');
}

1 个答案:

答案 0 :(得分: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;
}