YII2如何使用查询生成器更新字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YII2如何使用查询生成器更新字段相关的知识,希望对你有一定的参考价值。

如何在Yii2中使用查询构建器更新字段?

要求是来自表B的每个事务表A将自动更新值字段:实际和可用

表A.

  • ID
  • 预算
  • 来自表b的实际//查询金额
  • 可用//值=(预算 - 实际)

表B.

  • ID
  • tableA_id

表关系

enter image description here

这里是sql查询

SELECT
  DISTINCT(A.id) AS tableA,
  A.budget AS budget,
  SUM(B.amount) AS actual,
  budget - SUM(B.amount) AS Available
FROM
  tableA AS A
 LEFT JOIN
  TableB AS B
ON
  A.id = B.TableA_id
Group By
 tableA

结果

enter image description here

我试着向https://github.com/yiisoft/yii2/blob/master/docs/guide/db-dao.md#basic-sql-queries学习

但我不知道如何将SQL应用于Yii2中的查询构建器以及如何编码或将代码放在模型或控制器中的位置。

答案

一个简单的解决方案可以基于sql命令(而不是activeQuery)

Yii::$app->db->createCommand('update TableA A
               inner join (
                select B.TableA_id id
                    , sum(B.amount) Available
                FROM TableB B
                GROUP BY id
               ) T  on A.id =T.id
                AND A.id = :actid
               set budget = budget - T.Available')->bindValue(':actid', $your_id)
->execute();

我已经重新验证了您的代码,避免了我之前评论中的问题

另一答案

为什么不使用计算的值创建视图?因此,当您访问视图时,即时计算“实际”和“可用”数据。

以上是关于YII2如何使用查询生成器更新字段的主要内容,如果未能解决你的问题,请参考以下文章

Solr Highlighting:如何为同一字段请求多个片段长度?

Yii2 - 活动记录查询搜索字符串字段中的数字

如何在 graphQL 片段中定义可选字段以进行查询

如何使用yii2的缓存依赖特性

创建时隐藏的Activeform字段,并在Yii2中更新时显示

如何重用graphql查询中的字段