如何使用 Yii2 Query Builder 获取数据

How to get the data Using Yii2 Query Builder

我正在尝试什么 我有 2 table 名员工和工资详情,我想获取员工姓名和相应的工资

   $salaries = SalaryDetails::find()->select('salary_details.total_salary AS salary,staff.name AS name')
            ->leftJoin("staff",'salary_details.staff_id = staff.id');
        
            


                if ($fcreated_date != null && $tcreated_date != null) {
                    $salaries->andFilterWhere(['>=','salary_details.salary_given_date', $fcreated_date]);   
                    $salaries->andFilterWhere(['<=', 'salary_details.salary_given_date', $tcreated_date]);
                }

当我尝试使用

打印 sql 原始查询时
echo $salaries->createCommand()->getRawsql();

我得到 SELECT salary_details.total_salary AS salary, staff.name AS name FROM salary_details左连接staff开salary_details.staff_id=staff.id 这个查询在 phpMyadmin

中给出了我想要的数据

但是数组给出了,即 print_r($salaries);给出

yii\db\ActiveQuery 对象 ( [sql] => [on] => [joinWith] => [select] => 数组 ( [0] => salary_details.total_salary AS salary [1] => staff.name AS name ) [selectOption] => [distinct] => [from] => [groupBy] => [join] => Array ( [0] => Array ( [0] => LEFT JOIN [1] => staff [2] => salary_details.staff_id = staff.id ) ) [having] => [union] => [params] => Array () [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component: private] => Array ( ) [where] => [limit] => [offset] => [orderBy] => [indexBy] => [modelClass] => common\models\SalaryDetails [with] => [asArray] => [多个] => [primaryModel] => [link] => [via] => [inverseOf] => )

谢谢,

如您在 print_r 中所见,$salaries 是一个 ActiveQuery 实例。调用方法->asArray()->all()获取记录。

$query = SalaryDetails::find()
    ->select('salary_details.total_salary AS salary,staff.name AS name')
    ->leftJoin("staff",'salary_details.staff_id = staff.id');
if ($fcreated_date != null && $tcreated_date != null) {
    $query->andFilterWhere(['>=','salary_details.salary_given_date', $fcreated_date]);   
    $query->andFilterWhere(['<=', 'salary_details.salary_given_date', $tcreated_date]);
}
$salaries = $query->asArray()->all();

请注意,如果没有 asArrayall 将 return 一组 SalaryDetails 记录,您将丢失员工姓名。