Я бы использовал здесь Laravel отношения, их прелесть в том, что они не должны работать только с целыми числами базы данных. В своем классе деталей запаса добавьте отношение к деталям транспорта. Предполагая, что ваши классы названы StockEntryDetail
и StockTranportationDetail
.
class StockEntryDetail {
public function transportDetails() {
return $this->hasMany(StockTranportationDetail::class, 'ref_code', 'ref_code');
}
}
Чтобы иметь достойную производительность, я бы индексировал ref_code
и 'item_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']);
});
Тогда вы можете оптимизировать свой код следующим образом. Найдите все StockDetails, которые имеют TransportDetails и item_id одинаковы, это делается с помощью запроса для быстрой производительности. Обновите данные, и все готово.
// 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
когда вы начинаете преобразовывать ваши модели в массивы, вы делаете что-то не так, сохраняйте модели, поскольку вы всегда можете сохранить их в базе данных.