Попытка втиснуть отношения n: m (HABTM) в отношения 1: n не является хорошей практикой, и вы столкнетесь с ограничениями, которых у вас не было бы, если бы вы сделали это чисто, но это то, как вы могли бы это сделать (универсальный PHP, не специфичный для CakePHP):
Вы можете создать столбец в своей таблице для хранения всех родительских идентификаторов в списке через запятую. Вы можете прочитать отдельные идентификаторы, используя ...
$ids = explode(',', $idsFromColumn);
... и запишите их обратно в столбец, используя ...
$idsForColumn = implode(',', $ids);
Фактическое чтение-запись базы данных будет происходить до / после этих фрагментов, соответственно.
Если вы хотите сделать это правильно, вы хотите, чтобы ваш основной стол выглядел так:
id (int) - Primary key
name (varchar) - Name of the Category
И ваша таблица отношений n: m выглядит следующим образом:
id (int) - child
parentid (int) - parent
Вы бы запросили это так:
SELECT ...
FROM
main_table AS m
[LEFT OUTER|INNER] JOIN
relationship_table AS r
ON r.id=m.id
[LEFT OUTER|INNER] JOIN
main_table AS n
ON r.parentid=n.id
WHERE ...
Именно то, что вы хотите в себе ГДЕ и ваш SELECT будет соответствовать тому, чего вы надеетесь достичь. Относительно того, хотите ли вы LEFT OUTER JOIN или INNER JOIN , это зависит от того, хотите ли вы возвращать категории в m. *, У которых нет записи в вашей таблице отношениях (= не есть любой родитель). Если вы новичок в присоединении к синтаксису, ознакомьтесь с этой статьей вики о присоединениях .