使用 orderBy()

orderBy() 方法指定 SQL 查询的 ORDER BY 片段。例如,考虑我们的 employee 表具有字段 **emp_id,emp_first_name,emp_last_name 和 emp_salary。**假设我们需要通过增加员工工资的顺序来排序结果。我们可以在 sql 如下所示。

Select * from employee order by emp_salary

在 yii2 中,我们可以构建如下所示的查询

 //creates a new \yii\db\Query() object
    $query=new \yii\db\Query();

    $rows= $query->from('employee')->orderBy([
    'emp_salary' => SORT_ASC //specify sort order ASC for ascending DESC for descending      
    ])->all();

如果我们需要按升序排序员工的名字,然后按降序排序他们的工资,我们可以用普通的 SQL 编写如下。

Select * from employee order by emp_first_name ASC, emp_salary DESC

可以使用 yii2 构建等效的 sql,如下所示

//creates a new \yii\db\Query() object
    $query=new \yii\db\Query();

    $rows= $query->from('employee')->orderBy([
    'emp_first_name' => SORT_ASC
    'emp_salary' => SORT_DESC      
    ])->all();

你也可以使用字符串指定 ORDER BY,就像编写原始 SQL 语句时一样。例如,也可以如下给出生成上述查询。

//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC, emp_salary DESC')->all();

你可以调用 addOrderBy() 以向 ORDER BY 片段添加其他列。例如

//creates a new \yii\db\Query() object
$query=new \yii\db\Query();
$rows=$query->from('employee')->orderBy('emp_first_name ASC')
    ->addOrderBy('emp_salary DESC')->all();