php - 如何使用 Yii2 Query Builder 获取数据
问题描述
我正在尝试什么我有 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
作为salary
,staff
。name
AS name
FROM salary_details
LEFT JOIN staff
ON Salary_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] => 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] => [multiple] => [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();
请注意,如果没有asArray
将all
返回记录数组,SalaryDetails
您将丢失员工姓名。
推荐阅读
- python - python中“智能点”的遗传算法不起作用
- python - 哪个 r s-squared 分数更有帮助?
- javascript - 将一个对象处理成两个结果,无论如何都会返回在两个返回语句中首先处理的对象
- lua - 什么是 PREMAKE 错误:错误:[string "src/base/api.lua"]:592: bad argument #2 to 'deferredjoin' (string expected, got table)?
- javascript - 使用 JavaScript/JQuery 在网站上显示在线 JSON 数据
- javascript - 事件侦听器和值未更新的问题
- visual-studio-code - 为什么 Python 测试调试器不会停止在错误上?
- flutter - 如何在颤动中创建一排相同的图像?
- docker - 我可以使用任何客户端证书连接到在容器中运行的 MQTT 代理
- swiftui - 无法使用 SwiftUI 和 CoreBluetooth 访问 centralManagerDidUpdateState(_ central: CBCentralManager)