Добрый день знатоки!=)
Изначально было две проблемы, одну решил.
Подробнее:
Есть таблица "категории" и таблица "продукты"
С помощью связи "один ко многим", делаем жадную загрузку "категорий"
Модель 'Categories':
public function getProducts () {
return $this->hasMany(Products::className(), ['category_id' => 'id']);
}
и выводим всё в контроллере:
Контроллер:
public function actionView () {
$query = Categories::find()->select('categories.id');
$query->innerJoinWith(
[
'Products' => function ($query) {
$query->select(['products.id', 'products.price']);
$query->orderBy(['products.price' => SORT_ASC]);
},
]
);
debug($query->asArray()->all());
}
Получим:
Array
(
[0] => Array
(
[id] => 1
[products] => Array
(
[0] => Array
(
[id] => 3
[price] => 100
)
[1] => Array
(
[id] => 4
[price] => 50
)
)
)
[1] => Array
(
[id] => 2
[products] => Array
(
[0] => Array
(
[id] => 5
[price] => 300
)
)
)
)
Так вот, первая проблема, если я вызову $query->count(), то он мне покажет не "2", а "3", т.е. сумму всех элементов подмассивов "products". Решил данную проблему добавлением distinct: $query->distinct()->count()
И тут появилась другая проблема. там, где в подмассиве "products" больше одного элемента, мне нужно сортировать их по цене $query->orderBy(['products.price' => SORT_ASC]), но эта запись начинает конфликтовать с distinct
SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'mybd.products.price' which is not in SELECT list; this is incompatible with DISTINCT
The SQL being executed was: SELECT COUNT(*) FROM (SELECT DISTINCT `categories`.`id` FROM `categories` LEFT JOIN `products` ON `categories`.`id` = `products`.`product_id` ORDER BY `products`.`price`) `c`
Как сделать так, чтобы и сортировка работала, и показывал правильное количество элементов в массиве??
Сразу скажу, что count($query) не пойдет, в дальнейшем по этой переменной создается пагинация.