Поле array PostgreSQL и hasMany YII2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Поле array PostgreSQL и hasMany YII2

Сообщение Maxim Glushko »

Есть поле children_ids - массив integer (PostgreSQL)

И есть связь:

Код: Выделить всё

public function getChildren() {
    return $this->hasMany(Child::class, ['id' => 'children_ids']);
}
Эта связь прекрасно работает, когда нужно извлечь ->with('children')

Но отказывается, как только нужно сделать ->joinWith('children'):

Код: Выделить всё

SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: integer[] = integer
LINE 1: ...id" LEFT JOIN "children" ON "fathers"."children_ids" = "children...
Как подружить? Есть ли возможность вставить IN в hasMany?
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Re: Поле array PostgreSQL и hasMany YII2

Сообщение Maxim Glushko »

Хорошо.
Как соединить по LEFT JOIN чистым PostgreSQL две таблицы с полями массив и число?
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Re: Поле array PostgreSQL и hasMany YII2

Сообщение Maxim Glushko »

Чистым PostgreSQL объединяется так:

...papas LEFT JOIN children ON children.id = ANY (papas.children_ids)...

В getChildren() это так-то можно использовать, который бы работал и для joinWith()?

[и да, на своём проекте я бы сделал просто связующие таблицы для многих ко многим]
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Поле array PostgreSQL и hasMany YII2

Сообщение yiiliveext »

Используйте leftJoin()

Код: Выделить всё

Papas::find()
    ->leftJoin('children', 'children.id = ANY(papas.children_ids)')
    ->all();
Ответить