如何使用Laravel 5.2返回包含日期范围的数据?

时间:2017-10-13 09:57:30

标签: javascript laravel laravel-5.2 date-range accounting

所以我要做的就是制作试算平衡报告。我必须得到所有的会计科目表(coas)和两个日期之间的借方和贷方总和。我在数据库中有这些表,这些是他们的属性

  1. 客户:id,name
  2. Coas:id,name
  3. 日记:id,description,date
  4. Journal_details:id,journal_id,coa_id,debit,credit
  5. 我已将他们的关系放在模型中。

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

    我试图通过特定客户的日记帐详细信息获取所有coas,我已经在做了。     $ trials = $ client-> coas() - > with(' journals_details') - > get();

    但是,我使用日期范围仅选择属于输入的特定日期的日期范围。这是我的控制器。我试过了,但它没有用。

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

    我知道如何获取数据有问题。我只是不知道如何使用包含日期的日志标题获取所有coas及其详细信息。

    这是我获取日期范围的JavaScript。

    $('.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>'+
    
                        }                
                }           
            });
    });
    

    这是我想要实现的目标的照片https://imgur.com/a/IZvio返回所有内容所以没有日期。

2 个答案:

答案 0 :(得分:0)

模型上的date是碳实例吗?否则他们没有可比性。

您可以在$date属性中将其设置为模型上的Carbon实例:

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

通过执行此操作,您将覆盖$dates,因此请确保包括created_atupdated_at(如果您使用的是软删除,请deleted_at)。

Documentation link

答案 1 :(得分:0)

我认为你需要调试执行的sql laravel并找出它是否符合预期。在laravel中获取已执行sqls的方法是使用\DB::enableQueryLog()

在您的控制器方法中:

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

然后你可以打印之前执行的sql并检查它是否符合预期!