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