#php #mysql #yii2 #yii2-basic-app
#php #mysql #yii2 #yii2-basic-app
Вопрос:
Что я пытаюсь, у меня есть 2 таблицы staff и salarydetails, я хочу получить имя сотрудника и соответствующую зарплату
$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 amp;amp; $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
КАК name
salary_details
СЛЕВА ПРИСОЕДИНИТЬСЯ staff
К salary_details.staff_id = staff.id
и этот запрос дает данные, которые я хотел получить в phpMyAdmin
Но массив выдает ie, print_r($ salaries); дает
Объект yii db ActiveQuery ( [sql] => [on] => [joinWith] => [select] => Array ( [0] => salary_details.total_salary КАК зарплата [1] => staff.name КАК имя ) [selectOption] => [distinct] =>[from] => [groupBy] => [join] => Array ( [0] => Array ( [0] => ЛЕВОЕ СОЕДИНЕНИЕ [1] => staff [2] => salary_details.staff_id = staff.id ) ) [имеющий] => [объединение] => [параметры] => Array () [_events:yii base Component:private] => Array () [_behaviors:yii baseComponent:private] => Array () [где] => [limit] => [offset] => [OrderBy] => [indexBy] => [ModelClass] => common models SalaryDetails [with] => [asArray] => [multiple] => [primaryModel] => [link] => [via] => [inverseOf] => )
Спасибо,
Ответ №1:
Как вы можете видеть в вашем 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 amp;amp; $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
записей, и вы потеряете имя сотрудника.