2017-02-07 4 views
0

Как создать агрегацию в MongoDB/ActiveQuery? Например, если использовать MySQL/ActiveQuery мой запрос выглядит следующим образом:Yii2. Как использовать агрегацию в MongoDB/ActiveQuery?

$query = new Query(); 
$query->select(['name', '(field1 + field2) AS calculated_field']); 

Как построить этот запрос в MongoDB/ActiveQuery?

(я использую запрос для ActiveDataProvider. Мне нужно не только для области отображения, необходимости сортировать на этом поле тоже)

ответ

0

Вы можете использовать свойство в Yii2 (получатели и установщики) для модели, так что вы не нужно жестко указывать его в sql-запросе. Например, у вас есть модель «Человек» с двумя столбцами: имя, фамилия. И написав

$human = Human::findOne(0); 
echo $human->fullname; 

Вы хотите объединить $ человеко> имя и $ человеко> фамилию. Таким образом, вы можете сделать следующее: код модели

* @property string $name (from database) 
* @property string $surname (from database) 
* @property string $fullname 
class Human extends \yii\db\ActiveRecord 
{ 
... 
public function getFullname() { 
     return $this->name.' '.$this->surname; 
    } 
... 
} 

Это все, когда вы звоните $ человеко> ПолноеИмя, он возвращает getFullname() значение функции

+0

мне нужна не только для области отображения, необходимость для сортировки по этому полю тоже. –

+0

@ АндрейЛитвиненко, тогда вы можете просто повторить указанные шаги для пользовательской колонки activerecord http://stackoverflow.com/questions/28578057/sort-and-filter-data-in-gridview-yii2-where-column-is-not- in-database – Yerke

+0

спасибо. Этот пример работает только для MySql, но не работает с MongDb –