Я пишу приложение 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'.
Я нашел этот пример:
http://forum.phpsitesolutions.com/php-frameworks/cakephp/ajax-cakephp-dynamically-populate-html-select-dropdown-box-t29.html
где кто-то достигает чего-то подобного для штатов, округов и городов США. Тем не менее, я заметил в схеме базы данных - которую можно загрузить с сайта выше по ссылке - что таблицы базы данных не имеют каких-либо внешних ключей, поэтому теперь мне интересно, правильно ли я поступаю.
Буду очень признателен за любые указания и советы.
С уважением,
Chris