actualización laravel calcular suma de muchos a muchos valor

Bonny Aulia:

Tengo un problema acerca de la actualización algo en relación muchos a muchos con calcula de final de proceso. Por ejemplo mesa

stock_transports

introducir descripción de la imagen aquí

stock_tranportation_details

introducir descripción de la imagen aquí

stock_entries

introducir descripción de la imagen aquí

stock_entry_details

introducir descripción de la imagen aquí

si el botón de completo en el sistema de clic, quiero stock_transpotation_details actualización con suma de cant con la condición misma item_id y ref_code

y el resultado espero como esto

introducir descripción de la imagen aquí

mi código de progreso como éste

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 
                ];
     }
 }

y después de que la actualización stock_transport_detail i o simplemente volcar luego obtuvo un resultado erróneo, su sólo un cálculo de los stock_entry_details ayuda Plese me encontrar la solución para el código u otra manera, por ejemplo, con el disparador de MySQL o mejor la lógica

mrhn:

Me gustaría utilizar relaciones laravel aquí, la belleza de esos, es que no tienen que trabajar con bases de datos sólo enteros. En su clase de detalles comunes, añadir una relación a los detalles del transporte. Suponiendo que sus clases se nombra StockEntryDetaily StockTranportationDetail.

class StockEntryDetail {
    public function transportDetails() {
        return $this->hasMany(StockTranportationDetail::class, 'ref_code', 'ref_code');
    }
}

Para tener un rendimiento respetable, me gustaría índice ref_codey 'item_id' en ambas mesas.

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']);
});

A continuación, puede optimizar el código a la siguiente. Buscar todas las StockDetails que tiene TransportDetails y la item_id es el mismo, esto se hace con una consulta para un rendimiento rápido. Actualizar los datos y ya está.

// 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();
}

Su alcance y la pregunta es grande y un poco confuso, creo que lo entiendo y mediante la utilización de Laravelcaracterísticas, creo que la solución es más limpio y debería ser más manejable. En general Laravelcuando se empieza a convertir sus modelos en matrices que está haciendo algo mal, mantener a los modelos que siempre se puede guardar em a la base de datos.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=402588&siteId=1
Recomendado
Clasificación