Yii 2.0.14 支持的新特性介绍
- yii 框架从 2.0.14 版本开始,在
ActiveRecord
属性赋值时,支持子查询。
让我们来看一个例子来演示一下这个新的特性
以 CRM 中客户主表中的
visit_total_number
为例。该字段记录客户的跟进次数
在 2.0.14 版本以前,我们不得不这样做
/* 1. 查询 */
$number = ClientVisitModel::find()
->select(['visit_id'])
->where(['client_id' => $clientId])
->count();
/* 2. 查询 */
$clientModel = ClientMainModel::findOne($clientId);
$clientModel->visit_total_number = $number;
/* 3. 更新 */
$clientModel->save(FASLE);
或者
/* 1. 查询 */
$number = ClientVisitModel::find()
->select(['visit_id'])
->where(['client_id' => $clientId])
->count();
/* 2. 更新 */
ClientMainModel::updateAll(
['visit_total_number' => $number],
['client_id' => $clientId]
);
现在,我们可以这样做
$expression = new \yii\db\Expression('COUNT(visit_id)');
$subquery = ClientVisitModel::find()
->select([$expression])
->where(['client_id' => $clientId]);
/* 1. 查询 */
$clientModel = ClientMainModel::findOne($clientId);
$clientModel->visit_total_number = $subquery;
/* 2. 更新 */
$clientModel->save(FASLE);
或者
$expression = new \yii\db\Expression('COUNT(visit_id)');
$subquery = ClientVisitModel::find()
->select([$expression])
->where(['client_id' => $clientId]);
/* 一次搞定! */
ClientMainModel::updateAll(
['visit_total_number' => $subquery],
['client_id' => $clientId]
);
8899
哈哈哈
555
666666
哈哈
666