Содержит возможность показать более глубокие данные или объединить таблицу
У меня есть 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' => 'xxx@xxxxx.com',
'first_name' => 'xxxx',
'deleted' => false,
'displayName' => 'xxxxx'
)
)
В результате есть данные для Project.project_type_id, но я хотел бы получить более подробную информацию об этом. Таким образом, я могу показать это как имя вместо числа. может быть, вместо ProjectType.name. Как я могу добиться этого, чтобы я мог отсортировать это в представлении? что-то вроде этого
$this->Paginator->sort('ProjectType.name', 'Type');
2 ответа
Как насчет
'contain' => array(
'Project' => array(
'ProjectComment',
'ProjectFile',
'ProjectType',
),
'User'
),
Похоже, вы не содержали "ProjectType"
Проблема в том, что Paginator плохо сочетается с глубокими модельными ассоциациями. Я думаю, что если вместо того, чтобы использовать методы Cake для создания ассоциаций моделей, вы вместо этого выполняете свои объединения вручную, вы можете выполнять сортировку по своему усмотрению. Смотрите обсуждение ниже.
http://sinkpoint.railsplayground.net/cakephp-pagination-deep-sort-and-habtm/
Что еще хуже, вам, возможно, придется также переписать функцию разбивки на страницы модели, чтобы разобраться, как вам это нужно.