使用带有Yii2高级模板的MongoDB创建简单查询

时间:2015-07-17 11:29:22

标签: mysql mongodb yii2-advanced-app

我如何在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?

1 个答案:

答案 0 :(得分:1)

首先,您需要创建从yii\mongodb\ActiveRecord扩展的模型。

为什么不使用ActiveRecordActiveQuery等框架功能而不是编写原始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)可能最好在服务器端格式化日期。