Есть модели А и B. Таблица В является по сути промежуточной но не суть и хранит еще другие связи.
В таблице `tableB`ссылка на строку из таблицы А записывается с помощью двух полей ref_table_id и ref_rec_id.
По факту таблица Б выглядит так
Код: Выделить всё
id | ref_table_id | ref_rec_id
------------------------------------------------------
1 | tableA | 23
В модели А прописываю Отношение:
Код: Выделить всё
class A extends BaseActiveRecord
.....
public function getBs(): ActiveQuery
{
return $this->hasMany(B::class, [
'ref_rec_id' => 'id',
'ref_table_id' => "'".self::tableName()."'"
]
);
}
Код: Выделить всё
LEFT JOIN tableB
ON tableB.ref_rec_id = tableA.id AND tableB.ref_table_id = 'tableA'
Код: Выделить всё
LEFT JOIN tableB
ON tableB.ref_rec_id = tableA.id AND tableA.`tableA` = tableA.`ref_table_id`
'ref_table_id' => 'value'
и что бы yii не преобразовывал это как колонки присоединяемых таблиц.