Вопрос по организации базы данных и выборке.
Вопрос по организации базы данных и выборке.
Здравствуйте.
Ситуация такая:
Есть таблицы:
места(например парк отдыха):
id|place_name|desc|
занятия(чем можно заниматься, общий список всех занятий, ролики, велосипед и тп)
id|do_name|
пользователь
id|user_name|
связующая(пользователи отмечают, что посетили место)
id|id места|id пользователя|
Задача такая пользователь может отметить, что он посетил место и указать чем он там занимался, выбрав один или несколько вариантов из таблицы "занятия".
Вопрос как мне организовать хранение занятий указываемых пользователем.
1. Создать дополнительный столбец в таблице "связующая" и хранить там в виде: занятие 1, занятие3 (например: ролики, велосипед)
2. Создать дополнительную связующую таблицу:
id связи(из "связующая")|id пользователя|id занятия
И как потом лучше организовать выборку этих занятий,
связать через relation модели(если да, то подскажите как)
или доставать отдельной функцией.
Ситуация такая:
Есть таблицы:
места(например парк отдыха):
id|place_name|desc|
занятия(чем можно заниматься, общий список всех занятий, ролики, велосипед и тп)
id|do_name|
пользователь
id|user_name|
связующая(пользователи отмечают, что посетили место)
id|id места|id пользователя|
Задача такая пользователь может отметить, что он посетил место и указать чем он там занимался, выбрав один или несколько вариантов из таблицы "занятия".
Вопрос как мне организовать хранение занятий указываемых пользователем.
1. Создать дополнительный столбец в таблице "связующая" и хранить там в виде: занятие 1, занятие3 (например: ролики, велосипед)
2. Создать дополнительную связующую таблицу:
id связи(из "связующая")|id пользователя|id занятия
И как потом лучше организовать выборку этих занятий,
связать через relation модели(если да, то подскажите как)
или доставать отдельной функцией.
Re: Вопрос по организации базы данных и выборке.
Хранить наверное правильнее будет так:
связующая
id места|id пользователя|id занятия|
place 1 |user 1 |do 1|
place 1 |user 1 |do 1|
Далее связываем через many many в relation у модели Users
До этого момента разобрался, а как теперь получить список занятий, для конкретного пользователя?
связующая
id места|id пользователя|id занятия|
place 1 |user 1 |do 1|
place 1 |user 1 |do 1|
Далее связываем через many many в relation у модели Users
Код: Выделить всё
'places'=>array(self::MANY_MANY, 'Place',
'tbl_users_places(user_id, place_id)'),
Re: Вопрос по организации базы данных и выборке.
возьмите какой нибудь uml builder типа workbench и накидайте в нем схему. Ночью голова не варит читать буковки.
и тогда подскажу
и тогда подскажу
Re: Вопрос по организации базы данных и выборке.
Наверное сделаю просто отдельный метод для выборки без использования active record.
Наверное это не совсем верно, но других мыслей нет...
Наверное это не совсем верно, но других мыслей нет...
Re: Вопрос по организации базы данных и выборке.
в случае, когда действий несколько, просто добавляем несколько записей2. Создать дополнительную связующую таблицу:
id связи(из "связующая")|id пользователя|id занятия
Re: Вопрос по организации базы данных и выборке.
А как в случае такого хранения данных получить эти действия через ActiveRecord?ToxaDR писал(а):в случае, когда действий несколько, просто добавляем несколько записей2. Создать дополнительную связующую таблицу:
id связи(из "связующая")|id пользователя|id занятия
Я понимаю как связать пользователя с местом(через связующую таблицу), но как еще связать связующую таблицу с дополнительной, тут я в ступоре.
Re: Вопрос по организации базы данных и выборке.
Судя по всему мне необходимо копать в сторону through
Как я понимаю, он нужен для вытаскивания данных из таблицы связи.
Как я понимаю, он нужен для вытаскивания данных из таблицы связи.
Re: Вопрос по организации базы данных и выборке.
в связующей свяь на дополнительную.
Re: Вопрос по организации базы данных и выборке.
Т.е. делать отдельную модель для связующей и там прописывать связь?dmg писал(а):в связующей свяь на дополнительную.
Re: Вопрос по организации базы данных и выборке.
Могу даже перефразировать вопрос, есть пример из мануала: http://yiiframework.ru/doc/guide/ru/database.arr
А как делать ту же выборку если ролей у одного user'а может быть несколько и роли хранятся в отдельной таблице.Пример использования HAS_MANY с through — получение пользователей, состоящих в определённой группе, если они записаны в группу через роли.
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: Вопрос по организации базы данных и выборке.
используйте many_many или throughdurakoff писал(а):Могу даже перефразировать вопрос, есть пример из мануала: http://yiiframework.ru/doc/guide/ru/database.arr
А как делать ту же выборку если ролей у одного user'а может быть несколько и роли хранятся в отдельной таблице.Пример использования HAS_MANY с through — получение пользователей, состоящих в определённой группе, если они записаны в группу через роли.
потом так
Код: Выделить всё
$user = User::model()->findByPk($user_id);
$places = $user->places; //массив. Используем имя связи для получения данных
foreach($places as $place){
echo $place->place_name;
}
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Re: Вопрос по организации базы данных и выборке.
Это не то что нужно.
Ваш пример выведет все места, или в случае с примером из мануала все группы.
А мне необходимо получить все роли, одного пользователя в одной группе, грубо говоря, для вывода в профиле:
"user1" состоит в группе "group1" и имеет роли: "role1, role2, role6"
Ваш пример выведет все места, или в случае с примером из мануала все группы.
А мне необходимо получить все роли, одного пользователя в одной группе, грубо говоря, для вывода в профиле:
"user1" состоит в группе "group1" и имеет роли: "role1, role2, role6"
Re: Вопрос по организации базы данных и выборке.
ну так подстройте написанные запросы под свои нужды. или написать код ?durakoff писал(а):Это не то что нужно.
Ваш пример выведет все места, или в случае с примером из мануала все группы.
А мне необходимо получить все роли, одного пользователя в одной группе, грубо говоря, для вывода в профиле:
"user1" состоит в группе "group1" и имеет роли: "role1, role2, role6"
Re: Вопрос по организации базы данных и выборке.
Вопрос был изначально такой, как связать такие данные в relation.
Если у таблицы user_role, вид не как в мануале, а
user_id|role_id
1|2|
1|3|
т. е может быть несколько ролей.
хотя бы скажите мне, что это невозможно или наоборот и я буду дальше сам разбираться.
запрос findBySql написать проблем нет, пытаюсь увязать все в relation модели, пока не получается.
Если у таблицы user_role, вид не как в мануале, а
user_id|role_id
1|2|
1|3|
т. е может быть несколько ролей.
хотя бы скажите мне, что это невозможно или наоборот и я буду дальше сам разбираться.
запрос findBySql написать проблем нет, пытаюсь увязать все в relation модели, пока не получается.
Re: Вопрос по организации базы данных и выборке.
Понимаю, что вопрос был изначально сформулирован сумбурно, но я его переформулировал.
Пример из мануала с ролями http://yiiframework.ru/doc/guide/ru/database.arr,
один в один, кроме того что может быть несколько ролей у одного пользователя в одной группе.
Список ролей храним в отдельной таблице.
Как достать название ролей через AR, и возможно ли это в принципе.
Пример из мануала с ролями http://yiiframework.ru/doc/guide/ru/database.arr,
один в один, кроме того что может быть несколько ролей у одного пользователя в одной группе.
Список ролей храним в отдельной таблице.
Как достать название ролей через AR, и возможно ли это в принципе.
Re: Вопрос по организации базы данных и выборке.
ну всё просто.durakoff писал(а):Понимаю, что вопрос был изначально сформулирован сумбурно, но я его переформулировал.
Пример из мануала с ролями http://yiiframework.ru/doc/guide/ru/database.arr,
один в один, кроме того что может быть несколько ролей у одного пользователя в одной группе.
Список ролей храним в отдельной таблице.
Как достать название ролей через AR, и возможно ли это в принципе.
$model->roles // где 'roles' - связь к таблице с ролями
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: Вопрос по организации базы данных и выборке.
вы очень невнимательно читаете маны. Мой код выдаст именно места данного пользователяЭто не то что нужно.
Ваш пример выведет все места, или в случае с примером из мануала все группы.
А мне необходимо получить все роли, одного пользователя в одной группе, грубо говоря, для вывода в профиле:
"user1" состоит в группе "group1" и имеет роли: "role1, role2, role6"
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Re: Вопрос по организации базы данных и выборке.
Я так и написал:flashimage писал(а):вы очень невнимательно читаете маны. Мой код выдаст именно места данного пользователя
А мне нужно:durakoff писал(а):Это не то что нужно. Ваш пример выведет все места, или в случае с примером из мануала все группы.
Т.е. я в группе админ и модераторdurakoff писал(а):все роли, одного пользователя в одной группе, грубо говоря, для вывода в профиле:
"user1" состоит в группе "group1" и имеет роли: "role1, role2, role6"
Или в случае с местами: я был в парке, катался на роликах и велосипеде.
Нужны роли или действия.
Вообщем я похоже всех заморочил, буду разбираться сам.
Спасибо за помощь.
- flashimage
- Сообщения: 1517
- Зарегистрирован: 2011.01.23, 12:43
Re: Вопрос по организации базы данных и выборке.
ааа условие понял
пользователь many_many c местами
места many_many (или has_many) c событиями?
если да то так
пользователь many_many c местами
места many_many (или has_many) c событиями?
если да то так
Код: Выделить всё
$cr = new CDbCriteria();
$cr->with = array('places.events');
$cr->together = true;
$cr->condition = 'id = :id';
$cr->params = array(':id'=>$user_id);
$model = User::model->find($criteria);
...
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.