Вопрос:
Есть 2 таблицы (записи структуры условные, но, надеюсь, понятные):
1. Article
id (PK), header_id, body_id
2. Content
id (PK), type(header, body), content
Таблица Article связана с Content "по-хитрому", если учесть, что id для header и body никогда не пересекутся, то Content фактически содержит 2 записи для 1 записи Article.
В контексте Yii для модели Article я бы описал эти связи так:
'content_header' => array(self::HAS_ONE, 'Content', 'id')
'content_body' => array(self::HAS_ONE, 'Content', 'id')
Но вот незадача, AR подразумевает, что я должен связать для этих отношений именно PK с указанным полем, получается, что я не могу (или не знаю как) указать, что по ‘content_header’ я хочу связать именно header_id с id, а не id с id … Неужели все так плохо и эти связи никак не описать?
P.S. Чтобы сосредоточиться именно на проблеме связки в AR, считаем, что структура БД неизменяемая, есть возможность манипулировать только PHP кодом.
Да, про параметр ‘on’ в relations я знаю, но он не спасает ситуацию, так как отношение вида
'content_header' => array(self::HAS_ONE, 'Content', 'id', 'on' => 'header_id = id')
даст ошибку SQL, так как в ON запроса окажется
id = id AND header_id = id