MANY_MANY отношение

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

MANY_MANY отношение

Сообщение pirrat »

есть объект пользователь - User
есть объект сайт - Site

между объектами связь многие ко многим.
т.е. в бд существувет ещё таблица
user_site_accounts
с полями:
user_id //id пользователя
site_id //id сайта
url //адрес профиля пользователя на этом сайте

в модели User прописано следующие отношение:

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

    public function relations()
    {
        return array(
                      'accounts' => array(self::MANY_MANY, 'Site', 'user_site_accounts(user_id, site_id)',
                            ),        
                );
    } 
мы можем запросто получить все связанные объекты для пользователя

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

foreach($user->accounts as $account)
{
  echo $account->name;
//
}
 
все как надо, но помимо этого мне ещё надо получить поле url для этого пользователя из таблицы user_site_accounts , в которой хранятся собсвенно связи.
не пойму как это сделать просто и правильно средствами yii и AR .
Заранее спасибо!
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: MANY_MANY отношение

Сообщение pirrat »

одно решение нашел, мб не самое лучшее

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

            'accounts' => array(self::MANY_MANY, 'Site', 'user_site_accounts(user_id, site_id)',
                            'select' => 'accounts_s_u.url as user_url', 'alias' => 's_u'), 
в модели Site добавил

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

public $user_url; 
и теперь где надо получаю его:

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

$account->user_url
в итоге получился вот такой запрос:

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

system.db.CDbCommand.query(SELECT accounts_s_u.url as user_url, s_u.`id` AS `t1_c0` FROM `site` s_u INNER JOIN `user_site_accounts` accounts_s_u ON (accounts_s_u.`user_id`=:ypl0) AND (s_u.`id`=accounts_s_u.`site_id`))
над с алиасами поколдовать...

если подскажете способ покрасивее буду благодарен!
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: MANY_MANY отношение

Сообщение Caveman »

Как насчет использовать для промежуточной таблицы свою модель и наладить связь один-ко-многим с каждой из соседних таблиц?
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: MANY_MANY отношение

Сообщение pirrat »

мм , спасибо за подсказку, надо попробовать.
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: MANY_MANY отношение

Сообщение Caveman »

А какого вида урлы сохраняются?
Может, есть возможность разделить урл на сайтовую часть и юзерскую?
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: MANY_MANY отношение

Сообщение pirrat »

урл вообще хранится полный и там и там:
смысл такой
таблица
site, поле name содержит url до сайта такого вида:

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

vkontakte.ru  
а в таблице со связями соответвено url до аккаунта пользователя:

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

vkontakte.ru/id1939894  
как вариант может быть например так:

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

habrahabr.ru 
и

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

pirrat.habrahabr.ru 
соответсвенно ,вообщем зависит от конкретного сайта...

я думаю оставлю как есть ,и воспользуюсь вашей рекомендацией: создание модели для промежуточной таблицы.
Последний раз редактировалось pirrat 2009.10.08, 16:21, всего редактировалось 1 раз.
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: MANY_MANY отношение

Сообщение Caveman »

А не... не прошла идея...
Думаем дальше )
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: MANY_MANY отношение

Сообщение pirrat »

я думаю оставлю как есть ,или воспользуюсь вашей рекомендацией: создание модели для промежуточной таблицы - просто и прозрачно =)
duh386
Сообщения: 2
Зарегистрирован: 2011.08.26, 10:52

Re: MANY_MANY отношение

Сообщение duh386 »

Возникла такая же проблема - 2 таблицы связаны через промежуточную, причем в этой промежуточной есть доп. поля, значения которых нужно получить. Создание модели для промежуточной таблицы мне не кажется хорошим решением, да и костыли вроде указания кусков sql-запроса не выход. Может появилась какая-то возможность получать эти связи?
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: MANY_MANY отношение

Сообщение R3D3 »

duh386 писал(а):Возникла такая же проблема - 2 таблицы связаны через промежуточную, причем в этой промежуточной есть доп. поля, значения которых нужно получить. Создание модели для промежуточной таблицы мне не кажется хорошим решением, да и костыли вроде указания кусков sql-запроса не выход. Может появилась какая-то возможность получать эти связи?
http://www.yiiframework.com/forum/index ... __p__93547
Yii Jabber Conference: yii@conference.jabber.ru
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: MANY_MANY отношение

Сообщение xoma »

duh386
Сообщения: 2
Зарегистрирован: 2011.08.26, 10:52

Re: MANY_MANY отношение

Сообщение duh386 »

Во всех этих случаях создается модель для промежуточной таблицы, я хотел этого избежать, но вряд ли получится, придется ее создавать. Спасибо за ответы.
Ответить