В ООП не силен. 10лет назад кодил на PHP структурно :)
Начал вот изучать ООП и Yii2
#MSSQL2008 via freeTDS7.3 @linux<?php
namespace frontend\models;
use yii\db\ActiveRecord;
class Plist extends ActiveRecord
{
public static function getDb()
{
return \Yii::$app->db2;
}
public static function tableName() {
return 'dbo.pList';
}
}
?>
$pList = Plist::find()
->select('ID, Name, FirstName, MidName, WorkPhone, HomePhone, BirthDate')
->filterWhere(['like', 'Name', $searchQuery])
//->orderBy('Name')
//->all()
;
Хочу дальше работать с результатом так:
<?php foreach ($pList as $t) { ?>
<li><?=$t->Name." ".$t->FirstName." ".$t->MidName?></li>
<?php } ?>
так вот если я пытаюсь добавить сортировку вылетает ошибка
SQLSTATE[HY000]: General error: 20018 Column "dbo.pList.Name" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause. [20018] (severity 16) [(null)]
The SQL being executed was: SELECT COUNT(*) FROM [dbo].[pList] ORDER BY [Name]
->groupBy() не вносит ясности
Хотя если писать запрос руками SELECT * FROM [dbo].[pList] ORDER BY [Name] - работает норм
Yii в построителе запросов добавляет COUNT(*) - с ним не работает.
UPD*1: В итоге получается, что yii создает такой запрос:
SELECT COUNT(*) FROM (SELECT [ID], [Name] FROM [dbo].[pList] GROUP BY [ID], [Name] ORDER BY [Name])
а надо что-то вроде:
SELECT [ID], [Name], COUNT(*) FROM [dbo].[pList] GROUP BY [ID], [Name] ORDER BY [Name]
При этом если использую метод ->all() -то запрос отрабатывает, но возвращается результат в виде массива, а я хочу ActiveQueryInterface
Подскажите как правильно составить запрос?
UPD*2:
Не указал, как оказалось, важный момент!
/*$pagination = new Pagination([
'defaultPageSize' => 20,
'totalCount' => $pList->count()
]);*/
//$pList = $pList->offset($pagination->offset)->limit($pagination->limit)->all();
Использовал пагинацию. Каюсь. Закомментил.
И раскомментил //->orderBy('Name')->all()
Сортировка заработала. Без пагинации...
UPD*3: Решено! :)
Добавил orderBy() в пагинацию, там оно и заработало..
$pList = $pList->orderBy($sort->orders)->offset($pagination->offset)->limit($pagination->limit)->all();
Спасибо за наводящие вопросы!!