2010-04-24 3 views
0

Я пишу приложение CakePHP для регистрации работы, которую я выполняю для разных клиентов, но после нескольких дней работы я, похоже, не могу заставить ее делать то, что я хочу. Я прочитал большую часть книги CakePHP.CakePHP access косвенно связанная модель - вопрос новичка

и googled за все, что я ценю, поэтому я полагаю, что мне не хватает чего-то очевидного!

Каждый элемент журнала относится к подпроекту, который, в свою очередь, относится к «проекту», который, в свою очередь, относится к «суб-клиенту», который, наконец, принадлежит клиенту. Это 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/редактирования я представил с точки зрения вы все подозреваемого; а именно столбцы таблицы 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

ответ

0

Ваши иностранные ключевые имена должны быть особыми. Таким образом, project_id должен быть project_id, а sub_projects_id должен быть sub_project_id и т. Д. Если вы используете выпечку торта или строительные леса, вы не сможете редактировать связанные данные на каждой странице редактирования модели. В качестве дополнительной заметки убедитесь, что все созданные классы моделей являются единственными (в папке/models /).

Чтобы отредактировать несколько уровней ассоциации, возможно, так просто, как установить член рекурсивного класса $ на 2 в каждой из моделей, где вы хотите, чтобы страница редактирования имела несколько уровней ассоциации. Дайте мне знать, как это работает для вас.

В ответ на ваш второй вопрос.

Убедитесь, что ваши модели имеют соответствующую связь. Если вы испекли их, они должны включить их, но, учитывая вашу ошибку, похоже, что они каким-то образом не были включены. Таким образом, в log_item.php у вас должно быть что-то вроде

var $belongsTo = array('SubProject');

Смежные вопросы