CakePHP访问间接相关模型-初学者问题

CakePHP访问间接相关模型-初学者问题,cakephp,views,associations,Cakephp,Views,Associations,我正在编写一个CakePHP应用程序来记录我为各种客户机所做的工作,但是在尝试了几天之后,我似乎无法让它完成我想要的工作。我已经阅读了CakePHP网站上的大部分书籍 谷歌搜索了我所有的价值,所以我想我错过了一些明显的东西 每个“日志项”都属于一个“子项目”,而子项目又属于一个“项目”,而子项目又属于一个“子客户”,最终属于一个客户。以下是我正在使用的5个MySQL表: mysql> DESCRIBE log_items; +-----------------+--------------

我正在编写一个CakePHP应用程序来记录我为各种客户机所做的工作,但是在尝试了几天之后,我似乎无法让它完成我想要的工作。我已经阅读了CakePHP网站上的大部分书籍

谷歌搜索了我所有的价值,所以我想我错过了一些明显的东西

每个“日志项”都属于一个“子项目”,而子项目又属于一个“项目”,而子项目又属于一个“子客户”,最终属于一个客户。以下是我正在使用的5个MySQL表:

mysql> DESCRIBE log_items;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| date            | date         | NO   |     | NULL    |                |
| time            | time         | NO   |     | NULL    |                |
| time_spent      | int(11)      | NO   |     | NULL    |                |
| sub_projects_id | int(11)      | NO   | MUL | NULL    |                |
| title           | varchar(100) | NO   |     | NULL    |                |
| description     | text         | YES  |     | NULL    |                |
| created         | datetime     | YES  |     | NULL    |                |
| modified        | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+


mysql> DESCRIBE sub_projects;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| name        | varchar(100) | NO   |     | NULL    |                |
| projects_id | int(11)      | NO   | MUL | NULL    |                |
| created     | datetime     | YES  |     | NULL    |                |
| modified    | datetime     | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+


mysql> DESCRIBE projects;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| name           | varchar(100) | NO   |     | NULL    |                |
| sub_clients_id | int(11)      | NO   | MUL | NULL    |                |
| created        | datetime     | YES  |     | NULL    |                |
| modified       | datetime     | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+


mysql> DESCRIBE sub_clients;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(100) | NO   |     | NULL    |                |
| clients_id | int(11)      | NO   | MUL | NULL    |                |
| created    | datetime     | YES  |     | NULL    |                |
| modified   | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+


mysql> DESCRIBE clients;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(100) | NO   |     | NULL    |                |
| created  | datetime     | YES  |     | NULL    |                |
| modified | datetime     | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
我在CakePHP中建立了以下协会:

LogItem belongsTo SubProjects
SubProject belongsTo Projects
Project belongsTo SubClients
SubClient belongsTo Clients

Client hasMany SubClients
SubClient hasMany Projects
Project hasMany SubProjects
SubProject hasMany LogItems
使用“蛋糕烘焙”,我已经创建了模型、控制器索引、视图添加、编辑和删除以及视图,一切似乎都正常运行——就像我能够成功地执行简单的CRUD操作一样

问题

当在www.mydomain/log_items/edit上编辑“日志项”时,我会看到一个大家都会怀疑的视图;即log_items表的列以及相应的文本字段/选择框等。我还想合并选择框,以在“log_items”编辑视图中选择客户机、子客户机、项目和子项目

理想情况下,“子客户”选择框应根据选择的“客户”自行填充,“项目”选择框也应根据选择的“子客户”自行填充,等等

我想用相关选项填充选择框的方法是Ajax,但我不确定如何从间接相关模型的子视图实际访问模型,例如如何在“log_items”编辑视图中创建“sub client”选择框

我发现了这个例子:

有人在美国各州、县和市取得了类似的成就。但是,我注意到在数据库模式中(可以从上面的链接站点下载),数据库表没有任何外键,所以现在我想知道我是否以正确的方式进行操作

如有任何指示和建议,将不胜感激

亲切问候,


Chris

您的外键名称应为单数。所以项目id应该是项目id,子项目id应该是子项目id等等。如果您使用的是蛋糕烘焙或脚手架,则不能在每个模型编辑页面中编辑关联数据。作为旁注,请确保在/models/文件夹中创建的所有模型类都是单数的

要编辑多个级别的关联,可能只需在希望编辑页面具有多个级别关联的每个模型中将$recursive类成员设置为2即可。让我知道这对你有什么好处

回应你的第二个问题

确保您的模型具有所有正确的关联。如果您烘焙了它们,它们应该包括它们,但考虑到您的错误,它们似乎不知何故没有包括在内。因此,在log_item.php中,应该有如下内容

var$belongsTo=数组“子项目”