Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Laravel更新计算多对多值之和_Mysql_Laravel - Fatal编程技术网

Mysql Laravel更新计算多对多值之和

Mysql Laravel更新计算多对多值之和,mysql,laravel,Mysql,Laravel,我对更新多对多关系中的某些内容有问题,这与进程结束时的计算有关。 例如表 库存运输 库存运输详情 股票期权分录 库存输入详细信息 如果我在系统中单击“完成”按钮,我想用条件相同的物料id和参考代码的数量总和更新库存运输详细信息 我希望结果是这样的 foreach($stockEntry->stock_transport->details()->get() as $detail) { $arr[$detail->item_id.'_'.$detail-&g

我对更新多对多关系中的某些内容有问题,这与进程结束时的计算有关。 例如表

库存运输

库存运输详情

股票期权分录

库存输入详细信息

如果我在系统中单击“完成”按钮,我想用条件相同的物料id和参考代码的数量总和更新库存运输详细信息

我希望结果是这样的

foreach($stockEntry->stock_transport->details()->get() as $detail) {
     $arr[$detail->item_id.'_'.$detail->ref_code] = $detail->id;
 } 
 $total_qty = 0;
 foreach($stockEntry->details as $detail) {
     if($arr[$detail->item_id.'_'.$detail->ref_code]) {
                $total_qty += $detail->qty;
                $arr[$detail->item_id.'_'.$detail->ref_code] = [ 
                      'qty' => $total_qty,
                      'ref_code' => $detail->ref_code,
                      'item_id' => $detail->item_id 
                ];
     }
 }

我的进度代码是这样的

foreach($stockEntry->stock_transport->details()->get() as $detail) {
     $arr[$detail->item_id.'_'.$detail->ref_code] = $detail->id;
 } 
 $total_qty = 0;
 foreach($stockEntry->details as $detail) {
     if($arr[$detail->item_id.'_'.$detail->ref_code]) {
                $total_qty += $detail->qty;
                $arr[$detail->item_id.'_'.$detail->ref_code] = [ 
                      'qty' => $total_qty,
                      'ref_code' => $detail->ref_code,
                      'item_id' => $detail->item_id 
                ];
     }
 }
在那之后我更新了库存运输细节或者只是转储,然后得到了错误的结果,他们只是计算了一个库存条目细节
请帮助我找到代码的解决方案或其他方法,例如使用mysql触发器或更好的逻辑

我会在这里使用Laravel关系,这些关系的美妙之处在于,它们不必只处理数据库整数。在stock details类中,将关系添加到transport details。假设您的类名为
StockEntryDetail
StockTransportationDetail

class StockEntryDetail {
    public function transportDetails() {
        return $this->hasMany(StockTranportationDetail::class, 'ref_code', 'ref_code');
    }
}
为了获得令人尊敬的性能,我会在两个表上索引
ref\u code
和'item\u id'

Schema::create('stock_entry_details', function (Blueprint $table) {
    $table->index(['ref_code', 'item_id']);
});

Schema::create('stock_tranportation_details', function (Blueprint $table) {
    $table->index(['ref_code', 'item_id']);
});
然后您可以将代码优化为以下内容。查找所有具有TransportDetails且item_id相同的StockDetails,这是通过查询快速性能完成的。更新数据,您就完成了

// Eager load the relationships we are going over
$stockEntry = StockEntry::with('details.transportDetails')->find($id);

foreach ($stockEntry->details as $detail) {

    // find all with the same item_id, ref_code is done by relationship.
    $transportDetailsCount = $detail->transportDetails()->where('item_id')->count()

    // update your data
    $detail->qty = $transportDetailsCount;
    $detail->save();
}

您的范围和问题很大,而且有点混乱,我想我理解,通过利用
Laravel
功能,我认为解决方案更干净,应该更易于管理。一般来说,在
Laravel
中,当您开始将模型转换为数组时,您正在做一些错误的事情,请保留模型,因为您可以随时将它们保存到数据库中。

感谢您的回答和良好的解释@mrhn,我认为
//更新您的数据$detail->qty=$transportdetailscont只需更新库存输入详细信息,但我想更新库存运输详细信息,如何使用此关系更新库存运输详细信息CMIIWB,那么您想在其中添加多少计数?那么,你的计数逻辑似乎有缺陷,数量代表什么?我想把数量之和放入库存\输入\详细信息中,但结果是错误的,因为所有库存数量之和\运输\详细信息不在库存\输入\详细信息您的代码是正确的@mrhn,我的代码找不到库存\输入\ id,感谢您的回答和快速响应帮助:)