YII2 如何使用查询生成器更新字段
YII2 how to update field with query buider
如何在 Yii2 中使用查询生成器更新字段?
要求是来自 table B table A 的每一笔交易都会自动更新值字段:实际和可用
Table一个
- 编号
- 预算
- actual // 来自table b
的查询数量
- 可用//价值=(预算-实际)
Table乙
- 编号
- 金额
- tableA_id
table关系
此处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
结果
我正在尝试向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();
我已经重构了你的代码,避免了我之前评论中的问题
为什么不创建一个包含计算值的视图?因此,当您访问视图时,数据 "actual" 和 "available" 是即时计算的。
如何在 Yii2 中使用查询生成器更新字段?
要求是来自 table B table A 的每一笔交易都会自动更新值字段:实际和可用
Table一个
- 编号
- 预算
- actual // 来自table b 的查询数量
- 可用//价值=(预算-实际)
Table乙
- 编号
- 金额
- tableA_id
table关系
此处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
结果
我正在尝试向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();
我已经重构了你的代码,避免了我之前评论中的问题
为什么不创建一个包含计算值的视图?因此,当您访问视图时,数据 "actual" 和 "available" 是即时计算的。