Создайте простой запрос, используя MongoDB с расширенным шаблоном Yii2

Как я могу создать подобный запрос в Yii2 и MongoDB:

это с Yii2 и MySQL:

$connection = new Query;
$sql = "SELECT e.emp_id as emp_id, e.full_name as full_name, e.email as email, e.contact as contact, e.address as address, e.gender as gender, e.avatar as avatar, e.status as status, date_format(e.added_date_time,'%d/%m/%Y %H:%i:%s') as added_date_time, d.dept_name as dept_name FROM employee e, department d WHERE e.dept_id = d.dept_id";
$model = $connection->createCommand($sql);
$posts = $model->queryAll();
return json_encode($posts);

Но как мне создать такой же запрос в MongoDB с Yii2?
Есть ли такая команда, как createCommand() и передача sql в эту функцию?


person Pathik Vejani    schedule 17.07.2015    source источник


Ответы (1)


Прежде всего вам нужно создать модель, расширенную из yii\mongodb\ActiveRecord.

Почему бы не использовать такие функции фреймворка, как ActiveRecord и ActiveQuery, вместо написания чистого SQL?

Вы можете написать запрос как обычный ActiveQuery:

use app\models\Employee;
use yii\db\Expression;

...

Employee::find()
    ->select([
        'emp_id',
        'full_name'
        'email',
        'contact'
        'address',
        'gender',
        'avatar',
        'status',
        'added_date_time' => new Expression("date_format(added_date_time,'%d/%m/%Y %H:%i:%s')"),
        'dept_name',
    ])
    ->all();

Некоторые примечания к запросу:

1) Лучше создать другую модель для Department и отношения, если это необходимо. Текущая выборка из двух таблиц и где условие не имеет смысла, так как будут возвращены все сотрудники.

2) Из-за 1) псевдонимы являются избыточными.

3) В большинстве случаев с ActiveRecord вам не нужно явно указывать выбранные атрибуты.

4) Вероятно, лучше форматировать дату на стороне сервера.

person arogachev    schedule 17.07.2015
comment
я добавил условие where, потому что я также хочу название отдела - person Pathik Vejani; 17.07.2015
comment
как я могу получить название отдела без условия? - person Pathik Vejani; 17.07.2015
comment
Используйте отношения вместо. - person arogachev; 17.07.2015
comment
Знаете ли вы, есть ли какая-либо концепция отношений в mongoDB? - person Pathik Vejani; 17.07.2015
comment
и это должно быть в mongodb не в mysql - person Pathik Vejani; 17.07.2015