CakePHP 3 – привязка таблицы БД к себе

У меня есть таблица в моей БД, которая имеет связь с самим собой. Я пытаюсь получить все родительские категории с их дочерними категориями, но я не могу заставить его работать.

Вот как выглядит таблица:

id | name | description | image | is_child | forum_category_id | level 

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

Я испекла модель, и это находится в файле таблицы:

 $this->belongsTo('ForumCategories', [ 'foreignKey' => 'forum_category_id' ]); $this->hasMany('ForumCategories', [ 'foreignKey' => 'forum_category_id' ]); 

Код, который я использую для загрузки из БД, следующий:

 debug($results = $this->find() ->order(['id' => 'ASC']) ->where(['is_child' => 0]) ->toArray() ); 

С помощью этого кода я получаю родительские категории, но не дети. Поэтому я решил использовать «Contain», но возвращает только родительские категории.

 debug($results = $this->find() ->order(['id' => 'ASC']) ->where(['is_child' => 0]) ->contain([ 'ForumCategories' => function ($q) { return $q ->where(['is_child' => 1]); } ]) ->toArray() ); 

Я понятия не имею, как получить дочерние категории. Я прочитал что-то об использовании «Threaded» (пока нет результатов / успехов) или TreeBehaviour, но я действительно не знаю, как их использовать.

Любая идея о том, как это все еще возможно, очень ценится!

Вы должны использовать разные псевдонимы для ассоциации 2.

 $this->belongsTo('ForumCategories', [ 'foreignKey' => 'forum_category_id' ]); $this->hasMany('ForumChildCategories', [ 'className' => 'ForumCategories', 'foreignKey' => 'forum_category_id' ]); 

К этому $this->ForumCategories->find() вы получите родительский и $this->ForumChilfCategories->find() детей.

В противном случае – если это опция – измените схему базы данных и используйте поведение дерева.