J'écris une application CakePHP pour enregistrer le travail que je fais pour divers clients, mais après avoir essayé pendant des jours, je semble incapable de l'obtenir pour faire ce que je veux. J'ai lu la plupart du site Web du livre CakePHP.CakePHP accès modèle indirectement connexe - question du débutant
et googlé pour tout ce que je vaux, donc je suppose qu'il me manque quelque chose d'évident! Chaque 'élément de journal' appartient à un 'sous-projet', qui à son tour appartient à un 'projet', qui à son tour appartient à un 'sous-client' qui appartient finalement à un client. Ce sont les 5 tables MySQL J'utilise:
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 | |
+----------+--------------+------+-----+---------+----------------+
J'ai mis en place les associations suivantes dans 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
En utilisant 'bake gâteau' J'ai créé les modèles, les contrôleurs (index, vue ajouter, modifier et supprimer) et les vues, et les choses semblent fonctionner - comme je suis en mesure d'effectuer des opérations CRUD simples avec succès.
La question
Lors de l'édition d'un 'journal item' à www.mydomain/log_items/modifier Je suis présenté avec la vue que vous feriez tout suspect; Je voudrais également incorporer des boîtes de sélection pour choisir le client, le sous-client, le projet et le sous-projet dans la vue d'édition 'log_items'.
Idéalement, le « sous-client » select case doit remplir lui-même en fonction du choix « client », le « projet » boîte de sélection devrait également remplir lui-même en fonction de la « sous-client » sélectionné, etc., etc.
Je pense que la façon de remplir les boîtes de sélection avec des options pertinentes est Ajax, mais je ne suis pas sûr de savoir comment accéder réellement à un modèle de la vue enfant d'un modèle indirectement lié, par exemple comment créer un case de sélection du client dans la vue d'édition 'log_items'.
J'ai ont trouvé cet exemple:
où quelqu'un obtient quelque chose de similaire pour les États-Unis, les comtés et les villes. Cependant, j'ai remarqué dans le schéma de base de données - qui est téléchargeable depuis le lien ci-dessus - que les tables de la base de données n'ont pas de clés étrangères, alors maintenant je me demande si je vais bien dans les choses.
Tous les conseils et conseils seraient très appréciés.
Cordialement,
Chris