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