2013-09-11 2 views
0

Я начинаю изучать CakePHP и MVC в целом.Настройка ассоциаций на CakePHP

У меня есть база данных с большим количеством таблиц, которые я пытаюсь связать и читаю the docs.

Вот объяснение некоторых таблиц у меня есть:

clients стол, имеет поля:

  • id
  • name
  • currency
  • risk_code_id (это внешний ключ для risk_codes стол)

accounts стол:

  • id
  • client_id
  • ... еще несколько полей, относящихся к каждой учетной записи

risk_codes стол:

  • id
  • name

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

<?php 
class Client extends AppModel { 
    public $hasMany = 'Account'; 
    public $validate = array(
     'title' => array(
      'rule' => 'notEmpty' 
     ), 
     'body' => array(
      'rule' => 'notEmpty' 
     ) 
    ); 
} 

Этот извлекает учетные записи, относящиеся к клиенту.

Как бы связать таблицу risk_codes с номером clients? Нужно ли мне создать еще одну модель для risk_codes и определить ее там? Как должно быть совершенно очевидно, каждый клиент имеет один код риска.

ответ

0

Отъезд http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html.

Как клиент отношений -> risk_code - «много к одному», мы говорим: «Клиенты относится к Кодам риска». Таким образом, вы должны будете установить это двумя различными способами:

Клиент Модель

public $belongsTo = array(
    'RiskCode' => array(
     'className' => 'RiskCode', 
     'foreignKey' => 'risk_code_id' 
    ) 
); 

RiskCode Модель

public $hasMany = array(
    'Client' => array(
     'className' => 'Client', 
     'foreignKey' => 'risk_code_id' 
    ) 
); 

Есть много других вариантов, которые можно установить при создании эти отношения, так что посмотрите CookBook для получения подробной информации. :)

+0

это похоже работа. Теперь мне нужно выяснить, как редактировать/добавлять записи клиентов с помощью контроллера клиентов со связанными таблицами, но это другой вопрос. – harryg

+0

Yup. CakePHP в значительной степени выполняет всю тяжелую работу, когда вы связываете модели так же, как и вы, если вы используете [saveAll] (http://book.cakephp.org/2.0/ru/models/saving-your-data.html#model- saveall-array-data-null-array-options-array) для сохранения данных для всех связанных моделей одновременно. – mathielo

+0

Как сделать «risk_code» появляться в представлении редактирования, предполагая, что в настоящее время у меня есть входы для поля 'client' в форме' echo $ this-> Form-> input ('name'); '? – harryg

0

вам нужно создать клиента, модели и данные RiskCode и определить до отношения в обоих направлениях между:

Client (hasMany) < ---> Account (belongsTo)

Client (hasOne) < ---> RiskCode (belongsTo)

+0

Что такое соглашение об именах для моделей с именами таблиц с символами подчеркивания, данные risk_codes такие? – harryg

0

Если клиент имеет только один код риска, а затем добавить поле "client_id" в risk_codes таблицу и прикрепить его к клиенту:

public $hasOne = array(
     'RiskCode' 
    ); 
Смежные вопросы