Php 使用updateOrCreate检查记录是否存在,如果记录存在于laravel 5.5中,则进行计算(求和)

Php 使用updateOrCreate检查记录是否存在,如果记录存在于laravel 5.5中,则进行计算(求和),php,laravel,Php,Laravel,我有一个store函数,它将数组项保存到items表中,同时我尝试检查产品_是否已经在我的Warehouse1StockSummaries中。如果仍然没有,我将获取产品id及其数量,如果已经存在,那么我希望将数组中的“库存数量”中的值添加到仓库1库存摘要中的“库存数量”。我希望我的解释对你有意义:) 这是我的密码 public function store(Request $request) { $input = $request->all(); $items = [];

我有一个store函数,它将数组项保存到items表中,同时我尝试检查产品_是否已经在我的Warehouse1StockSummaries中。如果仍然没有,我将获取产品id及其数量,如果已经存在,那么我希望将数组中的“库存数量”中的值添加到仓库1库存摘要中的“库存数量”。我希望我的解释对你有意义:)

这是我的密码

public function store(Request $request)
{
    $input = $request->all();

    $items = [];

    for($i=0; $i<= count($input['stock_in_qty']); $i++) {

        if(empty($input['stock_in_qty'][$i]) || !is_numeric($input['stock_in_qty'][$i])) continue;

        $acceptItem = [
            'order_id' => $input['order_id'][$i],
            'product_id' => $input['product_id'][$i],
            'order_item_id' => $input['order_item_id'][$i],
            'delivery_date' => $input['delivery_date'][$i],
            'company_id' => $input['company_id'][$i],
            'stock_in_qty' => intval($input['stock_in_qty'][$i]),
            'stock_out_qty' => $input['stock_out_qty'][$i],
            'transfer_to' => $input['transfer_to'][$i],
            'delivery_note' => $input['delivery_note'][$i],
            'user_id' => $input['user_id'][$i]  
        ];

        $product_id = $input['product_id'][$i];
        $qty_in = intval($input['stock_in_qty'][$i]);
        // dd($qty_in);


        // ADD stock_in_qty TO QTY_IN ????
        $stockSummary = Warehouse1StockSummaries::updateOrCreate(
            ['product_id' => $product_id ], 
            ['qty_in'     => $qty_in,
             'qty_out' => null
         ]);
        // dd($stockSummary);

        array_push($items, Warehouse1stocks::create($acceptItem));
    }

    return redirect()->route('orders.index');
}
公共函数存储(请求$Request)
{
$input=$request->all();
$items=[];
对于($i=0;$i$input['order_id'][$i],
'product_id'=>$input['product_id'][$i],
'order\u item\u id'=>$input['order\u item\u id'][$i],
“交货日期”=>$input[“交货日期”][$i],
'公司id'=>$input['公司id'][$i],
“库存数量”=>intval($input[“库存数量”][$i]),
“缺货数量”=>$input[“缺货数量”][$i],
'传送到'=>$input['传送到'][$i],
“交货通知”=>$input[“交货通知”][$i],
'user\u id'=>$input['user\u id'][$i]
];
$product_id=$input['product_id'][$i];
$qty\U in=intval($input['stock\U in\U qty'][$i]);
//dd(数量单位:英寸);
//将进货数量添加到进货数量????
$stockSummary=Warehouse1StockSummaries::updateOrCreate(
['product\U id'=>$product\U id],
['qty\U in'=>$qty\U in,
“数量输出”=>空值
]);
//dd(库存汇总);
数组_push($items,Warehouse1stocks::create($acceptItem));
}
return redirect()->route('orders.index');
}

我检查了一下,一切正常。唯一缺少的是我需要从“库存数量”中获取值并添加到“库存数量”中的部分,如果产品id已在仓库1库存摘要中找到。提前感谢您!

您可以使用模型上的
wasRecentlyCreated
属性来确定模型是否刚刚创建是否启用。如果未启用,则不会在值中使用
$qty\u,这意味着您可以使用添加到数据库中的现有值:

$stockSummary = Warehouse1StockSummaries::firstOrCreate(
    ['product_id' => $product_id ], 
    ['qty_in' => $qty_in, 'qty_out' => null]
);

if (!$stockSummary->wasRecentlyCreated) {
    $stockSummary->increment('qty_in', $qty_in);
}

quantity\u in
在您的数据库中是否有默认值?Hi@RossWilson none。它没有默认值,它将取决于添加到它的值。啊,我知道了,我可以知道我应该在代码中的什么位置放置它吗?@Lito在您使用的
updateOrCreate
下面。Hi@RossWilson它可以工作,但有办法添加以前的记录吗不是增量?非常感谢!!@Lito你把我弄丢了,你说添加上一条记录是什么意思?我以为你只想在一条记录不存在的情况下创建一条新记录?@Lito
updateOrCreate
将使用第二个数组中的值,不管它是在更新还是在创建,而
first或create
只会使用第二个数组中的值y在创建第二个数组时使用第二个数组中的值。由于要保留行存在时的原始值,
updateOrCreate
不适用。