Relations() в Yii, не понимаю пример из книги

Я прочитал книгу «Разработка веб-приложений Pactpub с помощью Yii и PHP», ноябрь 2012 года. Столкнувшись с такой проблемой, я не могу понять логику использования отношений (). Вот диаграммы таблиц в базе данных:

Вам нужно вставить код в модель:

Модель выпуска:

...
'requester' => array(self::BELONGS_TO, 'User', 'requester_id'),
'owner' => array(self::BELONGS_TO, 'User', 'owner_id'),
'project' => array(self::BELONGS_TO, 'Project', 'project_id'),
);
...

Модель проекта:

...
'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
'users' => array(self::MANY_MANY, 'User', 'tbl_project_user_assignment(project_id, user_id)'),
...

Не могу понять, что добавляем? Если с моделью Issue все понятно, то с моделью Project - я не понимаю, что мы добавляем. Помогите разобраться...


person SkyStar    schedule 21.08.2013    source источник
comment
Схема таблиц базы данных: i.stack.imgur.com/jAhCq.gif   -  person SkyStar    schedule 21.08.2013
comment


Ответы (1)


Если с моделью Issue все понятно, то с моделью Project - я не понимаю, что мы добавляем

в каком-то случае у вас уже есть проект, и вы хотели бы найти все проблемы и пользователей-партнеров этого проекта.

$project = Project::model()->findByPK(1); // get project id=1

$issues = $project->issues; // get all of issues of project id=1, the result would be array
$users = $project->issues; // get all of users of project id=1, the result would be array

$project = Project::model()->with('issues', 'users')->findAll(); // get all of projects which has issue and user

//you have a user name ABC, and you want to find all of projects which contains a issue from owner has that user name.

$projects = Project::model()->with(array(
            'issues' => array(
                'alias' => 'issue',
                //'condition' => '',
                //'params' => array(),
                'with' => array(
                    'owner'=>array(
                        'alias' => 'user',
                        'condition' => 'username =:username',
                        'params' => array(':username'=>'ABC'),
                    )

                )
            ),

        ))->findAll();

Есть много способов, позволяющих смешивать их с несколькими отношениями и условиями. Один из приведенных выше примеров сгенерирует какой-то большой SQL-запрос SELECT, с которым я никогда не хочу иметь дело самостоятельно :)

Детали отношений AR

person Telvin Nguyen    schedule 21.08.2013