0

I'm trying to make a query to the database to retrieve a list of favorite products by category

In the category there is an attribute called sortcode after that I have a $categoryids : [3242,1231,6343,1232] and products

$products = Product::find()->where(['category'=>$categoryids])->all();

But the result was not as I expected, item in $products sort by index Now I want all product in category 3242 should be ranked first, then to 1231 ... How do I get the results I want? Sorry for my bad English! Thanks in advance and have a nice day !!

Yupik
  • 4,932
  • 1
  • 12
  • 26

2 Answers2

3

try to use where in condition

$products = Product::find()
     ->where(['in','category',$categoryids])
     ->orderBy('category DESC')
     ->all();

or if you want to sort it by category's shortcode you should join with categorys table, not tested yet but should works :

$products = Product::find()
    ->where(['in','category',$categoryids])
    ->joinWith(['categorys' => function ($query) {
        $query->orderBy('shortcode');
    }])
    ->all();

don't dorget to add categorys relations in your Product's model.

public function getCategorys()
{
    return $this->hasOne(Category::className(), ['id' => 'category']);
}
1

Refer Yii2 orderBy()

$products = Product::find()
            ->where(['category'=>$categoryids])
            ->orderBy(['here_your_category_id' => SORT_ASC])
            ->all();
vishuB
  • 4,173
  • 5
  • 31
  • 49