Код: Выделить всё
$query->where([ $tableModel . '.category_id' => $currentCategory['children']]);
Код: Выделить всё
$query->where([ $tableModel . '.category_id' => $currentCategory['children']]);
время самого запроса не большое, с ним проблем нет
Кстати, да, вы правы. Посмотрел ближе код yii, все таки от перебирает массив с id в цикле с проверками, вот оно и виснет
но как то это странно(($query->where($tableModel . '.category_id in ('. implode(', ', $currentCategory['children']) .')');
Да, но обычно не дергают записи таким запросом, если только по другому нельзя
ммм... а как быть если мне необходимо достать все товары по category_id? Это хорошо что нет промежуточной таблицы для множественной привязки категорий) возможно есть какая то хитрость, но я пока не встречал) есть вариант children-ы всех категорий воткнуть в таблицу и через нее делать запрос, что то вроде....
но встает вопрос о производительности при редактировании категорий, можно неожиданно получить падение на пол пути))), так ка в моем случае их 9к. Возможно есть другие варианты...category_id in (select children_id from categories_children where parent_id = :currentCategoryId)
Код: Выделить всё
а как быть если мне необходимо достать все товары по category_id?
Код: Выделить всё
$query->joinWith(['categories_children' => function ($q) {
$q->where('categories_children.parent_id = :currentCategoryId');
}]);
Можно ресурсоёмкие операции кидать в очередь и блокировать mutex ом.
для построение "катры" категорий я само собой не использую объекты, это маразм)) категории выбираются из базы одним запросом