А чем Вас не устраивает:
$query = Categories::find()->with('productsByPrice')->all();
и связь:
public function getProductsByPrice () {
return $this->hasMany(Products::className(), ['category_id' => 'id'])->orderBy('price');
}
Или если нужны товары, то почему бы не выбирать именно товары?
$query = Products::find()->with('category')->orderBy('price')->all();
или если нужны товары в определенной категории, то
$query = Products::find()->andWhere(['category_id'=>$id])->orderBy('price')->all();
Что Вы получить хотите в итоге?