首页 > 解决方案 > 将一行的值插入另一行的值?(最好通过 Eloquent)

问题描述

我目前正在尝试创建一个代码,其中一个特定行的值被插入到另一行的同一列中。

例如,我的产品类型 A 为 ProdA,它有一个当前数量(curr_quantity),ProdA 将在 1 周后由于变质而变成 ProdB,这意味着 ProdA 的 curr_quantity 的值将减去并添加到 ProdB 的 curr_quantity,我有更新 ProdA 的 curr_quantity 的代码,但它目前没有添加到 ProdB。

我的控制器代码:

$decrease = Product::where('created_at', '<', Carbon::now()->subDays(7))
                ->where('curr_quantity', '>', 0)
                ->get();

            foreach($decrease as $dec){
            $sub = $dec->curr_quantity;

                if($dec->products_id == 1){
                    $dec->update([
                        'curr_quantity' => $dec->curr_quantity - $sub
                        ]);
                }

                if($dec->products_id == 2){
                    $dec->update([
                        'curr_quantity' => $dec->curr_quantity - $sub,
                        ]);
                }

在我上面的代码中,它当前减去 ProdA 和 ProdB 的 curr_quantity 并减去,但它不是将值从一种产品“转移”到另一种产品。

编辑:在我当前的代码中,由于 ProdB 应该被“转移”到 ProdC,所以两者都减去了。很抱歉对于这个误会!

Product Type 是一个 FK,所以 Prod A 在实际代码中是 products_id == 1、B == 2 和 C == 3。

[Sample]
ID | Product Type | curr_quantity
0  | Prod A       | 70
1  | Prod B       | 30
2  | Prod C       | 10 
3  | Prod A       | 90
4  | Prod B       | 05
5  | Prod C       | 05

7天后应该是这样的:

ID | Product Type | curr_quantity
0  | Prod A       | 0
1  | Prod B       | 70
2  | Prod C       | 40 
3  | Prod A       | 0
4  | Prod B       | 90
5  | Prod C       | 10

有没有办法更新 ProdA 的 curr_quantity 并将其传输到 ProdB?

标签: phpsqllaraveleloquent

解决方案


推荐阅读