Содержится, чтобы показать более глубокие данные или присоединиться к таблице

У меня есть 3 таблицы: проекты, project_reminder_users, project_types.

The relations is as follow:
Project => belong to => ProjectType
           hasMany   => ProjectReminderUser

ProjectReminderUser => belong to => Project

ProjectType => hasMany   => Project

Я получаю все данные на основе того, кто назначил (ProjectReminderUser) этим

$this->Project->ProjectReminderUser->Behaviors->load('Containable');
$this->paginate = array(
    'ProjectReminderUser' => array(                     
        'limit' => $limit,
        'contain' => array(
                        'Project' => array(
                            'ProjectComment',
                            'ProjectFile',
                        ),
                        'User'
                    ),
        'conditions' => array(
            'User.group_id' => $this->Session->read('Auth.User.group_id'),
            'ProjectReminderUser.user_id' => $this->Session->read('Auth.User.id'),
            'Project.project_status_id' => PROJECT_STATUS_OPEN,

        ),  
        'order' => 'Project.due_date',          
    )
);

$this->set('myTasks', $this->paginate('ProjectReminderUser'));  

и результат выглядит так

array(
    'ProjectReminderUser' => array(
        'id' => '96',
        'user_id' => '1',
        'project_id' => '46'
    ),
    'Project' => array(
        'id' => '46',
        'project_type_id' => '9',
        'contact_id' => null,
        'company_id' => null,
        'subject' => 'Test Modified Field',
        'description' => 'Test Modified Field',
        'ProjectFile' => array(
            (int) 0 => array(
                'id' => '19',
                'project_id' => '46',
                'user_id' => '6',
                'file_path' => '46_bhbinary_xmm_1728.jpg',
                'notes' => null,
                'created' => '2013-11-26 18:37:49'
            ),
        ),
        'ProjectComment' => array(
        )
    ),
    'User' => array(
        'password' => '*****',
        'id' => '1',
        'group_id' => '1',
        'email' => '[email protected]',
        'first_name' => 'xxxx',
        'deleted' => false,
        'displayName' => 'xxxxx'
    )
)

В результате есть данные для Project.project_type_id, но я хотел бы получить более подробную информацию об этом. Поэтому я могу показать его как имя вместо номера. может быть, как ProjectType.name вместо этого. Как я могу добиться этого, чтобы я мог отсортировать его в представлении? что-то вроде этого

$this->Paginator->sort('ProjectType.name', 'Type');

person Harts    schedule 05.12.2013    source источник


Ответы (2)


Проблема в том, что Paginator плохо работает с глубокими ассоциациями моделей. Я думаю, что если вместо того, чтобы использовать методы Cake для создания ассоциаций моделей, вы вместо этого выполняете свои объединения вручную, вы сможете выполнить сортировку по своему усмотрению. См. обсуждение ниже.

http://sinkpoint.railsplayground.net/cakephp-pagination-deep-sort-and-habtm/

В худшем случае вам, возможно, придется также переписать функцию разбиения на страницы модели, чтобы справиться с сортировкой так, как вам нужно.

person Kai    schedule 05.12.2013

Как насчет

'contain' => array(
                        'Project' => array(
                            'ProjectComment',
                            'ProjectFile',
                            'ProjectType',
                        ),
                        'User'
                    ),

Похоже, вы не содержали "ProjectType"

person XuDing    schedule 06.12.2013