我如何在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?
答案 0 :(得分: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)可能最好在服务器端格式化日期。