如何正确创建递归连接模型和相关输入字段以在 CakePHP 中编辑 multi-joined table 结构的数据?

How to correctly create models for recursive joins and the relevant input fields to edit the data for a multi-joined table structure in CakePHP?

我有一个典型的员工 table,其中有各种 child table。一个 child table、employees_specialties 将一名员工加入他的各种专业和每个专业的严重程度。 Table 结构如下。请注意,我在 Stack Overflow 上查看了许多其他类似问题,但 none 非常匹配。我也看到了这个 How do I write a join query across multiple tables in 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 模型将 return employees_specialties 与专业和优先级结合起来。目前,我在加载 Employees 模型时得到以下结构。请注意优先级 table 为何未加入 priority_id?我需要它自动加入员工的 tables。这是我遇到的第一个问题:

 [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 在 priority_id 上进行第二次连接?

第二个问题是,成功加入员工优先级 table 后,我该如何创建允许更新员工专业优先级的编辑视图?我可以使用下面的代码轻松更新员工的专长,但是设置优先级的行为我看不到如何使用 CakePHP 功能来完成。似乎一旦上述第一期工作加入 EmployeesSpecialty 的优先级,那么我将使用 'EmployeeSpecialtyPriority'?

echo $this->Form->input('EmployeeSpecialty', array('multiple' => 'checkbox'));

或者,我很乐意以不同的方式设置 table 结构,因此我们有一个 employees_specialties_priorities table 加入 employees_specialties table到优先级 table。我实际上尝试过这个,但 Cake 仍然给我上面显示的有限结构,其中 Priorities table 没有加入 EmployeesSpecialites。我只需要一些帮助来了解为什么会失败!

我能够使用它来更接近需要的东西,并在查找中创建了连接:CakePHP find method with JOIN

我发送到视图的结果,并使用 non-CakePHP 在我需要的视图中创建表单字段,因为我找不到其他方法来做,然后更多的是 non-CakePHP 与类似于此 MySQL - UPDATE multiple rows with different values in one query 的 SQL 结合生成 SQL 查询以在保存时进行更新并使其全部正常工作。