我正在编写一个CakePHP应用程序来记录我为各种客户所做的工作,但经过几天的努力,我似乎无法让它做我想做的事情。我已经阅读了CakePHP网站的大部分内容。
用p来搜索我所有的价值,所以我认为我错过了一些明显的东西!每个“日志项目”都属于“子项目”,而子项目又属于“项目”,而“项目”又属于最终属于客户的“子客户”。这些是我正在使用的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
使用'cake bake'我创建了模型,控制器(索引,视图添加,编辑和删除)和视图,似乎功能正常 - 就像我能够成功执行简单的CRUD操作一样。
问题
在www.mydomain / log_items / edit上编辑“日志项目”时,我会看到你们都怀疑的视图;即log_items表的列以及相应的文本字段/选择框等。我还想在“log_items”编辑视图中合并选择框以选择客户端,子客户端,项目和子项目。
理想情况下,“子客户端”选择框应根据所选的“客户端”进行填充,“项目”选择框也应根据所选的“子客户端”等填充自身。
我想使用相关选项填充选择框的方法是Ajax,但我不确定如何从间接相关模型的子视图中实际访问模型,例如如何创建' “log_items”编辑视图中的“子客户端”选择框。
我找到了这个例子:
有人为美国各州,县和城市取得类似的成就。但是,我注意到在数据库模式中 - 可以从上面链接的站点下载 - 数据库表没有任何外键,所以现在我想知道我是否以正确的方式处理事情。
非常感谢任何指示和建议。
亲切的问候,
克里斯
答案 0 :(得分:0)
您的外键名称应该是单数。所以projects_id应该是project_id,sub_projects_id应该是sub_project_id,依此类推。如果您使用蛋糕烘焙或脚手架,则无法在每个模型编辑页面中编辑关联数据。作为旁注,请确保您创建的所有模型类都是单一的(在/ models /文件夹中)。
要编辑多个关联级别,可能就像在每个模型中将$ recursive类成员设置为2一样简单,您希望编辑页面具有多个关联级别。让我知道这对你有用。
回应你的第二个问题。
确保您的模型具有所有正确的关联。如果你把它们烤好,它们应该包括它们,但鉴于你的错误,看起来它们似乎不包括在内。所以在log_item.php中你应该有类似
的东西 var $belongsTo = array('SubProject');