如何使用 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();
请注意,如果没有 asArray
,all
将 return 一组 SalaryDetails
记录,您将丢失员工姓名。
我正在尝试什么 我有 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();
请注意,如果没有 asArray
,all
将 return 一组 SalaryDetails
记录,您将丢失员工姓名。