2013-08-09 2 views
0

Прежде всего я сожалею о названии этого вопроса я имел жесткий показатель времени, что назвать его:CakePHP работает с двумя контроллерами/модели

Вот моя проблема у меня есть следующие две таблицы данных :

Users 

Employees. 

Эти два данных столы соединены в 1 к 1 отношения

Теперь оба из них имеет модель представления и контроллер. Теперь мой вопрос раздроблен на две части: первая часть:

Когда работник хочет создать нового пользователя (нового сотрудника), он должен вставить данные в две таблицы сначала в таблицу users, а затем после получения user_id добавить запись в таблице employee

таблица сотрудников выглядит следующим образом:

users_idUsers client_id 

Где users_idUsers является userid из таблицы пользователя

Как мне обойти это? возможно ли добавить в модель моего сотрудника функции другой модели?

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

Следует сказать, что я совершенно не знаком с Тортом, поэтому я надеюсь, что некоторые из вас смогут мне помочь.

ответ

2

Зачем вам соединяться две модели вместе. CakePHP имеет надежный механизм сопоставления отношений, который делает все это для вас, не требуя «взять идентификатор из последней вставки и сделать что-то еще с ним».

Если я не ошибаюсь, ваша проблема положить в простых терминах:

An Employee hasMany users 

A User belongs to one Employee 

Для модели отношений 1-к-многим CakePHP имеет что-то под названием «hasMany»: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany

Это в так же, например, пользователь может сделать много комментариев; Сотрудник может создавать множество пользователей.

На обратной стороне этого отношения между пользователем и работником, вы хотите «belongsTo» отображение, так что вы знаете, что пользователь был добавлен какой-то сотрудника: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

Таким образом, вы можете найти то, что сотрудник, добавивший «пользователь X» путем поиска «через пользователя», так сказать.

Когда вы сопоставляете модели вместе, такие вещи, как поиск данных (например, findBy: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#findby) и управление отношениями с моделью, становятся намного проще, поскольку вам не нужно много думать о том, как отношения связаны друг с другом (это то, отображение указано, как описано выше), а скорее на том, что вы хотите получить.

В свою очередь, это позволяет делать такие вещи, как это интуитивно

$this->Employee->find('all', array(
      'recursive' => 1, 
      'fields' => array('employee.name, employee.age') 
      )); 

или если вы хотите найти сказать, что сотрудник, который добавил пользователь «Сара».

$this->Employee->User->find('all', array(
'conditions' => array('User.name' => 'Sarah'), 
'fields' => 'Employee.*', 
'recursive' => 0)) 

который вернет ассоциативный массив с сотрудниками.

В качестве побочного элемента: использование рекурсивного = 1 является abit старомодным. There is something much better called "Containable", который позволяет вам вводить модели, основанные на том, что вам нужно. Это выходит за рамки этой проблемы, но, хотя я бы сказал об этом.

+0

Так что я должен поставить это отношение в обеих моделях или только в одном из них? –

+0

Когда у меня добавлен код, я получаю следующую ошибку: SQL Query: SELECT 'Employee'.'users_idUsers',' Employee'.'client_id', 'User'.'id',' User'.'username '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' .'users' AS 'User' ON (' User'.'employee_id' = 'Employee'.'users_idUsers') WHERE 1 = 1 LIMIT 20 –

+0

Но моя заявка sql предполагает присоединиться к User.User.id = employees. users_idUsers –