2017-10-13 5 views
0

Donc, ce que j'essaie de faire est de produire un rapport de balance de vérification. Je dois obtenir tous les plans de compte (coas) et la somme de son débit et la somme de son crédit entre deux dates. J'ai ces tables dans la base de données et ce sont leurs attributsComment retourner des données avec une plage de dates avec Laravel 5.2?

  1. Client: id, nom
  2. Coas: id, nom
  3. Journal: id, description, date
  4. Journal_details: id, journal_id, coa_id, debit, credit

J'ai déjà mis leurs relations dans le modèle.

Client.php

public function coas() 
{ 

    return $this->belongsToMany('App\Coa'); 
} 

public function journal(){ 

    return $this->hasMany('App\Journal'); 
} 

Coa.php

public function clients(){ 

    return $this->belongsToMany('App\Client'); 
} 

public function journals_details(){ 

    return $this->hasMany('App\JournalDetails'); 
} 

Journal.php

public function journal_details(){ 

    return $this->hasMany('App\JournalDetails'); 
} 

public function client(){ 

    return $this->belongsTo('App\Client'); 
} 

JournalDetails.php

public function journal(){ 

    return $this->belongsTo('App\Journal'); 
} 


public function coa() 
{ 
    return $this->belongsTo('App\Coa'); 
} 

Je suis en train de faire tous les plans d'action avec des détails de journal d'un client spécifique, que je suis déjà. $ trials = $ client-> coas() -> avec ('journals_details') -> get(); Cependant, j'utilise une plage de dates pour sélectionner uniquement celles qui appartenaient à la date spécifique qui est entrée. Voici mon contrôleur. J'ai essayé mais ça ne marche pas.

public function trial_balance_generate(Request $request) 
     { 

      $client = Client::find($request->client_id); 

      $start = \Carbon\Carbon::parse($request->from)->startOfDay(); 

      $end = \Carbon\Carbon::parse($request->to)->endOfDay(); 

      $data= $client->coas()->with('journals_details')->whereBetween('date',[$start,$end])->get(); 

      return response()->json($data); 
     } 

Je sais que quelque chose ne va pas dans la façon dont j'obtiens les données. Je ne sais pas comment obtenir tous les coas et ses détails avec l'en-tête du journal qui contient la date.

Ceci est mon javascript pour obtenir la plage de dates.

$('.date').on('change', function() { 
     var from = $('#from').val(); 
     var to = $('#to').val(); 
     var client_id = $('.clientHidden').val(); 
     $.ajax({ 
       type : 'get', 
       url  : '/user/'+client_id+'/reports/trialbalance/generate/', 
       dataType: 'json', 
       data : { 
        'from':from, 
        'to':to, 
        client_id':client_id 
        }, 
       success:function(data){ 
        $('td').remove(); 
        for(var ctr = 0; ctr < data.length; ctr++) 
        { 

         $('#reportTbody').append() 

           '<tr><td>'+ data[ctr].name +'</td><td>{{$trial->journals_details->sum("debit")}}</td><td>{{$trial->journals_details->sum("credit")}}</td></tr>'+ 

        }     
      }   
     }); 
}); 

Voici une photo de ce que je suis en train de réaliser https://imgur.com/a/IZvio qui retourne tout donc pas encore les dates.

+0

Vous n'avez pas besoin de la colonne 'client_id' dans la table' coas' pour que 'Coa-> belongsToMany' fonctionne? – Matey

+0

Il y a une autre table nommée 'client_coa' qui se compose du client_id et du coa_id. – ninuhh

Répondre

0

Le modèle date de votre modèle est-il une instance carbone? Sinon, ils ne sont pas comparables.

Vous pouvez pour le définir comme une instance de carbone sur le modèle dans la propriété $date:

protected $dates = [ 
    'created_at', 
    'updated_at', 
    'date' 
]; 

En faisant cela, vous surchargez $dates alors assurez-vous d'inclure created_at et updated_at (et deleted_at si vous re en utilisant soft delete).

Documentation link

+0

Ohhh c'est vrai. Déjà essayé cela mais stil ne renvoie pas la bonne valeur. – ninuhh

0

Je pense que vous avez besoin de déboguer le Laravel sql exécuté et savoir si elle est comme prévu.La façon de chercher exécutés sqls dans Laravel est l'utilisation \DB::enableQueryLog():

Dans votre méthode de commande:

DB::enableQueryLog(); 
#your laravel query goes here 
$laQuery = DB::getQueryLog(); 
#optionally disable the query log: 
DB::disableQueryLog(); 

vous pouvez imprimer le SQL exécuté avant et vérifier si elle est comme prévu!