Переопределение Yii2 при условии относительно типа данных массива postgres - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь создать отношение к столбцу массива postgres в Yii2, и это дает мне ошибку (что неудивительно)

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 голосов
/ 20 января 2019

Вы не можете создать hasMany отношение таким способом - ActiveRecord не поддерживает такой синтаксис, и вы не можете использовать атрибуты модели для определения отношений, так как этот метод может быть выполнен до инициализации реальной модели (например, если вы строите соединения).

Вы можете создать геттер, который будет использовать ActiveQuery для получения связанных моделей - это не будет реальным отношением, и вы не сможете использовать его для быстрой загрузки или объединений, но должно нормально работать с отложенной загрузкой для одной модели:

public function getMyRelation() {
    $query = ModelName::find()
        ->andWhere(['@>', 'id', '{'. (int) $this->rel_id .'}'])
        ->alias('myRelation');
    $query->primaryModel = $this;
    $query->multiple = true;
    return $query;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...