【发布时间】:2010-04-30 22:28:49
【问题描述】:
我正在编写一个 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' 选择框。
我找到了这个例子:
某人在美国各州、县和市取得了类似的成就。但是,我在数据库模式中注意到 - 可以从上面的链接网站下载 - 数据库表没有任何外键,所以现在我想知道我是否以正确的方式处理事情。
非常感谢任何指针和建议。
亲切的问候,
克里斯
【问题讨论】:
标签: cakephp views associations