У меня есть типичная таблица сотрудников, которая имеет различные дочерние таблицы. Один дочерний стол, employee_specialties, объединяет сотрудника с его различными специальностями и уровнями серьезности для каждой специальности. Структура таблицы ниже. Примечание. Я рассмотрел много других подобных проблем, связанных с переполнением стека, но ни одна из них не совпадала. Я тоже это видел Как написать запрос на объединение нескольких таблиц в CakePHP? , но это не совсем решает мою проблему.
Обратите внимание, что в данный момент мы застряли на CakePHP 1.3, но работаем над переходом на 2.0, хотя мне нужно, чтобы это работало до миграции.
сотрудники:
id int
login varchar(50)
email varchar(100)
...other unrelated to this issue fields
Специальность:
id int
name varchar(50)
приоритеты:
id int
name varchar(50)
employees_specialties:
id int
employee_id int
specialty_id int
priority_id int
Так что проблема в том, что мне нужна возможность редактировать сотрудников, их специальности и приоритет специальности. Кажется, я не могу понять, как правильно настроить мои модели, чтобы модель Employees возвращала employee_specialties, объединенные со специальностями и приоритетами. В настоящее время я получаю структуру ниже, когда загружаю модель сотрудников. Обратите внимание, что таблица приоритетов не объединяется в priority_id? Мне это нужно, чтобы автоматически объединить таблицы для работника. Это первая проблема, с которой я столкнулся:
[data] => Array
(
[Employee] => Array
(
[id] => 1
[login] => loginname
[email] => mymail@example.com
)
[EmployeeSpecialty] => Array
(
[0] => Array
(
[id] => 46
[name] => Name
[longname] => Long Name
[EmployeesSpecialty] => Array
(
[id] => 13955
[employee_id] => 1
[specialty_id] => 46
[priority_id] => 1
)
)
)
Что мне нужно сделать, чтобы CakePHP выполнил 2-е объединение по priority_id?
Вторая проблема заключается в том, что после успешного присоединения таблицы приоритетов сотрудника, как мне создать представление редактирования, позволяющее обновить приоритет специальности сотрудника? Я могу легко обновить специализацию сотрудника, используя приведенный ниже код, но сам акт установки приоритета не вижу, как добиться этого с помощью функциональности CakePHP. Казалось бы, как только вышеприведенный 1-й выпуск сработает, чтобы присоединить приоритет к EmployeesSpecialty, я бы использовал «EmployeeSpecialtyPriority»?
echo $this->Form->input('EmployeeSpecialty', array('multiple' => 'checkbox'));
В качестве альтернативы, я был бы рад настроить таблицу по-другому, поэтому у нас есть таблица employee_specialties_priorities, которая соединяет таблицу employee_specialties с таблицей приоритетов. Я действительно попробовал это, но Cake все еще дает мне ограниченную структуру, которую я показываю выше, где таблица Приоритеты не присоединена к EmployeesSpecialites. Мне просто нужна помощь, чтобы понять, почему это не получается!