$orderProducts = OrderProduct::find()
->select(['product_id', 'count(id) as amount'])
->with('category')
->groupBy(['product_id'])
->orderBy(['amount' => SORT_DESC])
->all();
$categories = array_column($orderProducts, 'category');
foreach($categories as $item) {
echo $item->provider->name; // Так будет работать ??
}
$model = Categories::findPublished()
->with([
'products' => function($query) {
$query
->select(['COUNT(*) AS cnt'])
->groupBy('product_id')
->limit(3)
;
}
])
// тут не уверен в праведности синтаксиса
->orderBy('products.cnt desc')
->all();
public function behaviors()
{
//I use array_merge() because UserModel extends from another custom model.
return ArrayHelper::merge(
parent::behaviors(),
[
MyBehavior::className(),
]
);
}
public function attach($owner)
{
parent::attach($owner);
$owner->validators[] = Validator::createValidator(
'file', $this->owner, '_abc', [
'skipOnEmpty' => true,
'extensions' => 'png, jpg, jpeg',
'maxFiles' => 5,
'maxSize'=>2000000
]
);
}
public function getRating()
{
return $this->hasMany($this->className, [$this->attribute => 'id']);
}
$data = Products::find()
->select('*, sum(mc_orders_products.qty) as qqty')
->innerJoin('mc_orders_products', 'm_products.id=mc_orders_products.product_id')
->groupBy('mc_orders_products.product_id')
->orderBy('qqty desc')
->limit(10)
->all()
;/code>
Немного подкорректировал, но тут ловлю ошибку.
<b>SQLSTATE[42803]: Grouping error: 7 ERROR: column "m_products.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT *, sum(mc_orders_products.qty) as qqty FROM "m_produc...
^
The SQL being executed was: SELECT *, sum(mc_orders_products.qty) as qqty FROM "m_products" INNER JOIN "mc_orders_products" ON m_products.id=mc_orders_products.product_id GROUP BY "mc_orders_products"."product_id" ORDER BY "qqty" DESC LIMIT 10
Error Info: Array
(
[0] => 42803
[1] => 7
[2] => ERROR: column "m_products.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT *, sum(mc_orders_products.qty) as qqty FROM "m_produc...
^
)</b>
Как раз добрался до данной задачи. Интересует такой вопрос - как сделать сортировку через связанные данные:
У меня есть:
Предложения:
offers
.id
Купоны;
deals
.id
.percent(NULL)
.price(NULL)
Нужно фильтровать offers относительно вложенных в него deals
Если я правильно понимаю - во первых нужно в OffersSearch добавить эти поля в свойства класса и rules
А вот как правилььно сделать andWhere через связь
Тут возникают непонятки.
1. OffersSearch -> relation andwhere
2. Условие фильтрации должно удовлетворять, если хоть один deals каждого вакантного offer-а отвечает условиям фильтра.