я эта проблема с Containable, что у меня есть Категории модель, которая ведет себя как дерево:В CakePHP, как сделать Containable поведения сотрудничать с поведением дерева
class Category extends AppModel {
public $actsAs = ['Tree', 'Containable'];
public $hasMany = [
'Novelty' => [
'className' => 'Novelty',
'foreignKey' => 'category_id',
'dependent' => false,
]
]
}
его структура:
Category(
id int(11)
name varchar(255)
parent_id int(11)
lft int(11)
rght int(11)
)
и у меня есть Новизна модель:
class Novelty extends AppModel {
public $actsAs = ['Containable'];
public $belongsTo = [
'Category' => [
'className' => 'Category',
'foreignKey' => 'category_id',
]
];
}
Новизна структура:
Novelty(
id int(11)
name varchar(255)
category_id int(11)
)
Ассоциации
Category -> hasMany -> Novlety
Novelty -> belongsTo -> Category
Категории Пример структуры из find('threaded')
как это:
['Category'] => [
'id' => 13
'name' => 'Main'
'lft' => 88
'rght' => 105
'children' => [
[0] => [
['Category'] => [
'id' => 131
'name' => 'sub1'
'lft' => 89
'rght' => 90
]
]
[1] => [
['Category'] => [
'id' => 132
'name' => 'sub2'
'lft' => 91
'rght' => 92
]
]
[...]
]
]
И теперь, когда я пытаюсь Containable:
$this->Category->contain(
'Novelty' => [
'conditions' => [
'AND' => [
'Novelty.category_id >=' => 13,
'Novelty.category_id !=' => 14
]
]
]
);
Теперь, когда я бегу Category->find('all')
там находятся нет новинок в результате. Потому что торт добавляет свое собственное состояние Novelty.category = (13)
. И я не могу избавиться и не расширять его. Таким образом, запрос выглядит так:
SELECT `Novelty`.`id`, `Novelty`.`name`, `Novelty`.`category_id`,
FROM `databse`.`novelties` AS `Novelty`
WHERE ((`Novelty`.`category_id` >= 13)
AND (`Novelty`.`category_id` < 14))
AND `Novelty`.`category_id` = (13)
Есть ли специальное условие, которое изменяет условие запроса по умолчанию?
Моя цель:
Чтобы получить новации, связанные с подкатегорию также, не только те, которые связаны с основной категории. Но возможно ли это?
Я забыл упомянуть, что Категория - это Дерево. Поэтому я хочу получить всю новинку для категории = 13 и ее детей. У меня есть соглашение о том, что все дочерние категории имеют число начиная с 13. Бу теперь я вижу, что условие было бы неправильным, пока я не сделаю идентификатор для сортировки в лингвистическом порядке. Так или иначе.Я хочу получить все новинки для категории = 13 и его детей –
«У меня есть соглашение о том, что все дочерние категории имеют число начиная с 13.» Это не похоже ни на один из поддерживаемых типов (родительский-родительский, вложенный набор) древовидных структур поведения. Однако для создания требуемых запросов используйте объединения, а не сдерживаемое поведение. – burzum