如何正确创建递归连接模型和相关输入字段以在 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 查询以在保存时进行更新并使其全部正常工作。
我有一个典型的员工 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 查询以在保存时进行更新并使其全部正常工作。