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