Как создать много-много-самореферентные отношения - PullRequest
0 голосов
/ 01 мая 2019

Документы CakePHP утверждают следующее:

You can even create self-associated tables to create parent-child relationships:

class CategoriesTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('SubCategories', [
            'className' => 'Categories'
        ]);

        $this->belongsTo('ParentCategories', [
            'className' => 'Categories'
        ]);
    }
}

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

Так что неясно, как actually установить самореферентные отношения.

Я пробовал это:

CREATE TABLE `categories` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `categories_categories` (
  `parent_id` int(11) NOT NULL,
  `child_id` int(11) NOT NULL,
  PRIMARY KEY (`parent_id`,`child_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

А потом испек это ... но мне не ясно, как заставить это работать с моделями и какие модели создавать и какие ассоциации в них вставлять, или как их представлять.по элементу формы.

...