Как правильно создать модели для рекурсивных объединений и соответствующие поля ввода для редактирования данных для многоуровневой структуры таблицы в CakePHP? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть типичная таблица сотрудников, которая имеет различные дочерние таблицы. Один дочерний стол, 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. Мне просто нужна помощь, чтобы понять, почему это не получается!

1 Ответ

0 голосов
/ 27 июня 2019

Я смог использовать это, чтобы приблизиться к тому, что было необходимо, и создал объединение в find: Метод поиска CakePHP с JOIN

Результаты этого я отправил в представление и использовал не-CakePHP для создания полей формы в необходимом представлении, потому что я не мог найти другого способа сделать это, а затем, в основном, не-CakePHP в сочетании с аналогами SQL MySQL - ОБНОВИТЬ несколько строк с разными значениями в одном запросе , чтобы сгенерировать SQL-запрос для обновления при сохранении и заставить его все работать.

...