Active record перелинковка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Unsiker
Сообщения: 57
Зарегистрирован: 2012.05.02, 12:17

Active record перелинковка

Сообщение Unsiker »

Есть три таблицы

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

Table 1             Linking              Table 2            
+----------------+   +---------------+   +-----------------+
| Resource Table |   | Link ID       |   | Resource Table2 |
+----------------+   +---------------+   +-----------------+
| Resource1 ID   |   | Resource1 ID  |   | Resource2 ID    |
| ........       |   | Resource2 ID  |   | ........        |
+----------------+   +---------------+   +-----------------+
 
Связь между первой и третей происходит через промежуточную таблицу Linking.
Подскажите можно ли как то это описать через Active record, так что бы при обращении Resource1->Resource2 автоматически выбирались данные из таблицы Table 2 (связь один ко многим) ?
Огонь!
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Active record перелинковка

Сообщение lancedevnull »

google://yii+many_many
Аватара пользователя
Unsiker
Сообщения: 57
Зарегистрирован: 2012.05.02, 12:17

Re: Active record перелинковка

Сообщение Unsiker »

Спасибо за жидкие ссылки, на документацию. Что знал то и узнал.
Пишу отношения для Table 1

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

    'resource' => array(self::MANY_MANY, 'Resource1', 'linking(id, object)'), 'together'=> true ),
 
Несовсем мне понятно что выставить в третьем параметре, так как у меня в таблицах префиксы,
кроме того как быть если в таблице линковки проставлено еще одно поле type и выбирать нужно по определенным типам?
Огонь!
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Active record перелинковка

Сообщение sluchainiyznak »

как быть если в таблице линковки проставлено еще одно поле type и выбирать нужно по определенным типам?
Создать третью модель "линковку" и прописывать связи до нее с обоих сторон (HAS_MANY)
Аватара пользователя
Unsiker
Сообщения: 57
Зарегистрирован: 2012.05.02, 12:17

Re: Active record перелинковка

Сообщение Unsiker »

Нашел другой вариант

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

            'linking'  => array(self::HAS_MANY, 'Linking', 'object'),
            'resource'  => array(self::HAS_MANY, 'Resource2', array('related_to'=>'id'), 'through'=>'linking', 'condition'=>'linking.type="1"', 'select'=> array('id', 'title') ),
Достаточно неплохой вариант.
В таком варианте он делает LEFT OUTER JOIN, при первом (MANY_MANY) INNER JOIN.
Может кто хорошо знаком с БД и подскажет что быстрее LEFT OUTER JOIN или INNER JOIN ?
Огонь!
Ответить