как использовать таблицу, которая связана с самой собой?

#cakephp #associations

#cakephp #ассоциации

Вопрос:

как использовать таблицу, которая связана с самой собой? я использую cakephp, а таблица — это раздел :

 create table SECTIONS
(
   SECTIONID            int(11) not null auto_increment,
   TITLE                char not null,
   CONTROLID            int(11) not null,
   SECTIONPARENTID      int(11),
   primary key (SECTIONID)
)
 

эта таблица связана с самой собой, и я использую belong to и имеет много ассоциаций, и моя модель :

 class Section extends AppModel {
    var $name = 'Section';
    var $primaryKey = 'SECTIONID';
    var $displayField = 'TITLE';
}
 

я использую belong to и имеет много ассоциаций в двух таблицах. но я не могу использовать в этом примере.
спасибо за помощь.

Ответ №1:

Самореферентные модели просты в Cake, если вы знаете трюк, но вы не делаете себе никаких одолжений, не используя соглашения об именах Cake. Я предполагаю, что вы используете источник данных, который находится вне вашего контроля 🙂

 Class Section extends AppModel {

  var $belongsTo = array(
    'Parent'=>array(
      'className'=>'Section',
      'foreignKey'=>'SECTIONPARENTID'
    )
  );

  var $hasMany = array(
    'Children'=>array(
      'className'=>'Section',
      'foreignKey'=>'SECTIONPARENTID'
    )
  );

}
 

Когда вы выполняете запрос, такой как $this-> Section->find(‘first’), вы получите возвращаемый массив, который выглядит следующим образом:

 section => array(
  SECTIONID,
  ...
  'Parent'=>array(
    'SECTIONID',
    ....
  ),
  'Children'=>array(
    [0] => array(
      [SECTIONID]
    ),
    [1] => array(
      [SECTIONID]
    ),
    ...
  )
)