В CakePHP как заставить поведение Containable взаимодействовать с поведением Tree

У меня есть эта проблема с встраиваемым, что у меня есть модель категорий, которая ведет себя как дерево:

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
]
]
[...]
]
]

И теперь, когда я пытаюсь содержать:

$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)

Есть ли какое-либо специальное условие, которое изменяет условие запроса по умолчанию?

Моя цель:

Чтобы получить новинки, которые также относятся к подкатегории, а не только те, которые относятся к основной категории.
Но возможно ли это вообще?

0

Решение

Теперь, когда я запускаю Category-> find (‘all’), в результате нет новинок.
Потому что торт добавляет свое собственное условие Novelty.category = (13). И я
не может ни избавиться, ни расширить его. Итак, запрос выглядит так:

Это правильное поведение кода. У вас есть категрия имеет много Ассоциация новизны, чтобы это произошло, Cake добавляет условие.

Мне кажется, ты хочешь найти все записи Новизны Кроме те для категории 14, это правда?

временный unbindModel () ваша ассоциация новизны и добавьте ее обратно как ассоциацию hasOne без внешнего ключа, но с условием:

['conditions' => ['Novelty.cateogry_id !=' 14]]

Или использовать массив соединений запроса.

2

Другие решения

Других решений пока нет …