【问题标题】:How to get the data Using Yii2 Query Builder如何使用 Yii2 Query Builder 获取数据
【发布时间】:2020-11-23 12:13:19
【问题描述】:

我正在尝试什么 我有 2 个表员工和薪水详细信息,我想获取员工姓名和相应的薪水

   $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 LEFT JOIN staff ONsalary_details.staff_id = staff.id 这个查询给出了我在 phpMyadmin 中想要的数据

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

yii\db\ActiveQuery 对象 ( [sql] => [on] => [joinWith] => [select] => 数组 ( [0] => Salary_details.total_salary AS 薪水 [1] => staff.name AS name ) [selectOption] => [distinct] => [from] => [groupBy] => [join] => Array ( [0] => Array ( [0] => LEFT JOIN [1] => 员工 [2] => Salary_details.staff_id = staff.id ) ) [have] => [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] => [multiple] => [primaryModel] => [link] => [via] => [inverseOf] => )

谢谢,

【问题讨论】:

    标签: php mysql yii2 yii2-basic-app


    【解决方案1】:

    正如您在 print_r 中看到的,$salaries 是一个 ActiveQuery 实例。调用其上的方法-&gt;asArray()-&gt;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 将返回一个 SalaryDetails 记录数组,您将丢失员工姓名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多