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

Mysql YII2如何使用查询生成器更新字段,mysql,activerecord,yii2,query-builder,insert-update,Mysql,Activerecord,Yii2,Query Builder,Insert Update,如何使用Yii2中的查询生成器更新字段 要求是表B中的每笔交易表A将自动更新值字段:实际和可用 表A 身份证 预算 实际//查询表b中的金额 可用//值=(预算-实际) 表B 身份证 数量 表格id 表关系 这里是sql查询 SELECT DISTINCT(A.id) AS tableA, A.budget AS budget, SUM(B.amount) AS actual, budget - SUM(B.amount) AS Available FROM tab

如何使用Yii2中的查询生成器更新字段

要求是表B中的每笔交易表A将自动更新值字段:实际和可用

表A

  • 身份证
  • 预算
  • 实际//查询表b中的金额
  • 可用//值=(预算-实际)
表B

  • 身份证
  • 数量
  • 表格id
表关系

这里是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
结果

我正在努力向你学习


但我不知道如何将SQL应用于Yii2中的查询生成器,也不知道如何编码,也不知道如何将代码放入模型或控制器中

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


我已经重新编译了您的代码,避免了我之前评论中的问题,为什么不创建一个包含计算值的视图呢?因此,当您访问视图时,“实际”和“可用”数据是动态计算的。

您的sql代码似乎有一些问题。。1) 为什么不同和不同??如果使用group by,则不需要使用distinct..2)为什么group by中没有提到非聚合列。。这在sql中是不推荐使用的,在较新版本的数据库中是不允许的,例如:mysql 5.73)您不能在“选择其他列名”或“计算”(预算)中为列名使用别名。您想做什么?您想
更新
记录还是想
选择
,您的问题标题是关于
update
,并且您添加了
select
查询以转换为
QueryBuilder
语法?很抱歉造成混淆。我的注意力是
update
value,先生,谢谢你的回答。先生,您能告诉我您的建议代码放在哪里吗。在_form.php或模型表或控制器中tableA@ChonjaroenChauynoo你的评论中还有一个问题。。您已要求在加入解决方案中进行SQL更新。。我还发了一封asnwer。。因此,在非编码服务中,在问题之间添加问题是不公平的。。因此,如果我的答案是正确的,你可以将其标记为接受如果我的答案是错误的,你可以向我显示错误。。但不是在另一个问题上添加问题question@ChonjaroenChauynoo将其添加到模型中创建一个函数,并通过用于更新模型中的值的操作调用它controller@scaisEdge再次感谢您的回答,并为错误道歉。请让我先试试你的陈述,完成后我会给你更新。@MuhammadOmerAslam谢谢你的建议,先生
\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();