Я фанат использования одной таблицы "категорий" и наличия поля parent_id
для ссылки на любую другую категорию в таблице.
Это позволяет вам иметь многопоточные категории в одной таблице ... ваши "Группы категорий" будут просто любой строкой категории, в которой нет данных в поле parent_id.
Пример данных
id name parent_id category_count
1 appliances null 1
2 dogs null 1
3 couch 1 0
4 pitbull 2 0
5 games null 0
//...
По сути, «Категория» связана с самим собой - вот модельные ассоциации:
(ссылка: 3-й пример кода здесь в книге CakePHP )
class Category extends AppModel {
public $belongsTo = array(
'Parent' => array(
'className' => 'Category',
'foreignKey' => 'parent_id',
'counterCache' => true
)
);
public $hasMany = array(
'Children' => array(
'className' => 'Category',
'foreignKey' => 'parent_id'
)
);
//...
}
class Item extends AppModel {
public $belongsTo = array('Category');
//...
}
Вы также можете сделать Item hasAndBelongsToMany Category
вместо belongsTo
, если хотите - зависит только от вашей настройки.
Дополнительная информация:
CounterCache: Для получения дополнительной информации о counterCache CakePHP, перейдите сюда .
find-> резьбовое соединение: Используя этот метод, вы можете легко получить вложенные данные с помощью команды find-> резьбовое соединение CakePHP ( нажмите здесь для получения дополнительной информации об этом )