Hi, I am using yajra/laravel-datatables, the problem is that during the execution of the method function getProduction(), the whole application hangs in the page loading for more than 50 seconds and during this time it uses much of the cpu https://imgur.com/9zrjTHB, I have no idea what is causing this, please help me to fix this issue, here is my code :
Controller :
function getProduction()
{
DB::table('count_pr_jrs')->delete();
DB::insert('
insert into count_pr_jrs (produit_id, nb_ns, date)
SELECT id_produit, COUNT(Log_ns.n_s), DATE(Log_ns.created_at)
FROM Log_ns
GROUP BY DATE(Log_ns.created_at)
');
Production::updateOrCreate(['journee' => date('Y-m-d')], ['journee' => date('Y-m-d')]);
DB::table('Productions')
->select(DB::raw("DATE(journee)"))
->whereDate('journee', '!=', date('Y-m-d'))
->update(['action' => '0']);
DB::table('Productions')
->select(DB::raw("DATE(journee)"))
->whereDate('journee', '=', date('Y-m-d'))
->update(['action' => '1']);
$pro = Log_ns::join('Magasins', 'Magasins.produit_id', '=', 'Log_ns.id_produit')
->join('Produits', 'Produits.id', '=', 'Magasins.produit_id')
->join('Productions', 'Productions.journee', '=', DB::raw('DATE(Log_ns.created_at)'))
->select([
'Magasins.id', 'Log_ns.created_at', 'Produits.kit', 'Productions.action', 'Produits.produit', 'Produits.modele',
DB::raw('(SELECT Magasins.qte FROM Magasins WHERE Log_ns.id_produit = Magasins.produit_id AND DATE(Log_ns.created_at) = DATE(Magasins.created_at)) as qte,
(SELECT nb_ns FROM count_pr_jrs WHERE Log_ns.id_produit = count_pr_jrs.produit_id AND DATE(Log_ns.created_at) = DATE(count_pr_jrs.date)) as qte_ins,
(SELECT total_jr_tr_st FROM Productions WHERE Log_ns.id_produit = Productions.produit_id AND DATE(Log_ns.created_at) = DATE(Productions.journee)) as qte_jr,
(SELECT COUNT(Reparations.n_s) FROM Reparations WHERE Reparations.n_s = Log_ns.n_s AND DATE(Log_ns.created_at) = DATE(Reparations.created_at)) as qte_rep,
(SELECT SUM(qte) FROM Magasins WHERE Magasins.produit_id = Log_ns.id_produit) AS qte_glob_mp,
(SELECT COUNT(Log_ns.n_s) FROM Log_ns WHERE Log_ns.id_produit = Magasins.produit_id) as qte_glob_pro'),
])
->groupBy(DB::raw('DATE(Log_ns.created_at)'))->distinct()->get();
return DataTables::of($pro)
->make(true);
}
View :
$('#p_table').DataTable({
"bProcessing": true,
"sAjaxSource": "{{ route('production.getProduction') }}",
"columns":[
{ "data": "id"},
{ "data": "created_at"},
{ "data": "produit"},
{ "data": "modele"},
{ "data": "kit"},
{ "data": "qte"},
{ "data": "qte_ins"},
{ "data": "qte_rep"},
{ "defaultContent": "" },
{ "data": "action"},
{ "data": "qte_glob_mp"},
{ "data": "qte_glob_pro" },
{ "defaultContent": "" }
],
'rowCallback': function(row, data, index){
if(data.action == '1'){
$(row).find('td:eq(9)').html('<a href="#" class="btn btn-xs btn-primary Quantite" id="'+data.id+'"><i class="glyphicon glyphicon-plus"></i> quantité</a> <br />'+data.qte_jr);
}
else
{
$(row).find('td:eq(9)').html(data.qte_jr);
}
$('td', row).eq(12).html(data['kit'] - data['qte_glob_pro']);
}
});